VirtualBox

Changeset 27743 in vbox for trunk/src


Ignore:
Timestamp:
Mar 26, 2010 2:50:55 PM (15 years ago)
Author:
vboxsync
Message:

IPRT,*: Renamed RTProcDaemonize to RTProcDaemonizeUsingFork. Added a new RTPRocDaemonize that is portable. RTProcCreate* got a new flag RTPROC_FLAGS_DETACHED, while RTPROC_FLAGS_DAEMONIZE got renamed to RTPROC_FLAGS_DAEMONIZE_DEPRECATED.

Location:
trunk/src/VBox
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp

    r27682 r27743  
    888888    rc = RTProcCreate (path, args, env, 0, &pid);
    889889# else
    890     rc = RTProcCreate (path, args, env, RTPROC_FLAGS_DAEMONIZE, &pid);
     890    rc = RTProcCreate (path, args, env, RTPROC_FLAGS_DAEMONIZE_DEPRECATED, &pid);
    891891# endif
    892892    if (RT_FAILURE (rc))
     
    936936        strcpy (cmd, VirtualBox_exe);
    937937        const char * args[] = {path, "-systray", 0 };
    938     # ifdef RT_OS_WINDOWS /** @todo drop this once the RTProcCreate bug has been fixed */
     938# ifdef RT_OS_WINDOWS /** @todo drop this once the RTProcCreate bug has been fixed */
    939939        rc = RTProcCreate (path, args, env, 0, &pid);
    940     # else
    941         rc = RTProcCreate (path, args, env, RTPROC_FLAGS_DAEMONIZE, &pid);
    942     # endif
     940# else
     941        rc = RTProcCreate (path, args, env, RTPROC_FLAGS_DAEMONIZE_DEPRECATED, &pid);
     942# endif
    943943
    944944        if (RT_FAILURE (rc))
  • trunk/src/VBox/Installer/solaris/VBoxZoneAccess.c

    r17324 r27743  
    4545
    4646    /* Daemonize... */
    47     RTProcDaemonize(false /* fNoChDir */,
    48                     false /* fNoClose */,
    49                     NULL /* pszPidfile */);
     47    RTProcDaemonizeUsingFork(false /* fNoChDir */,
     48                             false /* fNoClose */,
     49                             NULL /* pszPidfile */);
    5050
    5151    /* Open the device */
  • trunk/src/VBox/Main/webservice/vboxweb.cpp

    r26562 r27743  
    654654    if (g_fDaemonize)
    655655    {
    656         rc = RTProcDaemonize(false /* fNoChDir */, false /* fNoClose */,
    657                              NULL);
     656        rc = RTProcDaemonizeUsingFork(false /* fNoChDir */, false /* fNoClose */, NULL);
    658657        if (RT_FAILURE(rc))
    659658        {
  • trunk/src/VBox/Runtime/Makefile.kmk

    r27618 r27743  
    443443        generic/semrw-$(if-expr defined(VBOX_WITH_LOCKLESS_SEMRW),lockless-,)generic.cpp \
    444444        generic/uuid-generic.cpp \
     445        generic/RTProcDaemonize-generic.cpp \
    445446        generic/RTProcIsRunningByName-generic.cpp \
    446447        generic/RTThreadGetNativeState-generic.cpp \
     
    486487        generic/RTFileMove-generic.cpp \
    487488        generic/RTLogWriteDebugger-generic.cpp \
     489        generic/RTProcDaemonize-generic.cpp \
    488490        generic/RTTimeLocalNow-generic.cpp \
    489491        generic/RTTimerCreate-generic.cpp \
     
    550552        generic/RTFileMove-generic.cpp \
    551553        generic/RTLogWriteDebugger-generic.cpp \
     554        generic/RTProcDaemonize-generic.cpp \
    552555        generic/RTRandAdvCreateSystemFaster-generic.cpp \
    553556        generic/RTRandAdvCreateSystemTruer-generic.cpp \
     
    604607        generic/RTFileMove-generic.cpp \
    605608        generic/RTLogWriteDebugger-generic.cpp \
     609        generic/RTProcDaemonize-generic.cpp \
    606610        generic/RTTimeLocalNow-generic.cpp \
    607611        generic/RTTimerCreate-generic.cpp \
     
    665669        generic/RTMpGetSet-generic.cpp \
    666670        generic/RTMpIsCpuOnline-generic.cpp \
     671        generic/RTProcDaemonize-generic.cpp \
    667672        generic/RTProcIsRunningByName-generic.cpp \
    668673        generic/RTThreadGetNativeState-generic.cpp \
     
    703708        generic/RTFileMove-generic.cpp \
    704709        generic/RTLogWriteDebugger-generic.cpp \
     710        generic/RTProcDaemonize-generic.cpp \
     711        generic/RTProcIsRunningByName-generic.cpp \
    705712        generic/RTTimeLocalNow-generic.cpp \
    706713        generic/RTTimerCreate-generic.cpp \
     
    709716        generic/utf16locale-generic.cpp \
    710717        generic/uuid-generic.cpp \
    711         generic/RTProcIsRunningByName-generic.cpp \
    712718        generic/RTThreadGetNativeState-generic.cpp \
    713719        r3/posix/RTFileQueryFsSizes-posix.cpp \
     
    763769        generic/RTFileMove-generic.cpp \
    764770        generic/RTLogWriteDebugger-generic.cpp \
     771        generic/RTProcDaemonize-generic.cpp \
    765772        generic/RTSystemQueryOSInfo-generic.cpp \
    766773        generic/RTSystemQueryDmiString-generic.cpp \
  • trunk/src/VBox/Runtime/r3/posix/process-posix.cpp

    r27667 r27743  
    8787    AssertPtrReturn(pszExec, VERR_INVALID_POINTER);
    8888    AssertReturn(*pszExec, VERR_INVALID_PARAMETER);
    89     AssertReturn(!(fFlags & ~RTPROC_FLAGS_DAEMONIZE), VERR_INVALID_PARAMETER);
     89    AssertReturn(!(fFlags & ~(RTPROC_FLAGS_DAEMONIZE_DEPRECATED | RTPROC_FLAGS_DETACHED)), VERR_INVALID_PARAMETER);
     90    AssertReturn(!(fFlags & RTPROC_FLAGS_DETACHED) || !phProcess, VERR_INVALID_PARAMETER);
    9091    AssertReturn(hEnv != NIL_RTENV, VERR_INVALID_PARAMETER);
    9192    const char * const *papszEnv = RTEnvGetExecEnvP(hEnv);
     
    175176    pid_t pid = -1;
    176177#ifdef HAVE_POSIX_SPAWN
    177     if (   !(fFlags & RTPROC_FLAGS_DAEMONIZE)
     178    if (   !(fFlags & (RTPROC_FLAGS_DAEMONIZE_DEPRECATED | RTPROC_FLAGS_DETACHED))
    178179        && uid == ~(uid_t)0
    179180        && gid == ~(gid_t)0
     
    303304             * Daemonize the process if requested.
    304305             */
    305             if (fFlags & RTPROC_FLAGS_DAEMONIZE)
    306             {
    307                 rc = RTProcDaemonize(true /* fNoChDir */, false /* fNoClose */, NULL /* pszPidFile */);
     306            if (fFlags & (RTPROC_FLAGS_DAEMONIZE_DEPRECATED | RTPROC_FLAGS_DETACHED))
     307            {
     308                rc = RTProcDaemonizeUsingFork(true /*fNoChDir*/,
     309                                              !(fFlags & RTPROC_FLAGS_DAEMONIZE_DEPRECATED) /*fNoClose*/,
     310                                              NULL /* pszPidFile */);
    308311                if (RT_FAILURE(rc))
    309312                {
     313                    /* parent */
    310314                    AssertReleaseMsgFailed(("RTProcDaemonize returns %Rrc errno=%d\n", rc, errno));
    311315                    exit(127);
    312316                }
     317                /* daemonized child */
    313318            }
    314319
     
    424429
    425430
    426 /**
    427  * Daemonize the current process, making it a background process. The current
    428  * process will exit if daemonizing is successful.
    429  *
    430  * @returns iprt status code.
    431  * @param   fNoChDir    Pass false to change working directory to "/".
    432  * @param   fNoClose    Pass false to redirect standard file streams to the null device.
    433  * @param   pszPidfile  Path to a file to write the process id of the daemon
    434  *                      process to. Daemonizing will fail if this file already
    435  *                      exists or cannot be written. May be NULL.
    436  */
    437 RTR3DECL(int)   RTProcDaemonize(bool fNoChDir, bool fNoClose, const char *pszPidfile)
     431RTR3DECL(int)   RTProcDaemonizeUsingFork(bool fNoChDir, bool fNoClose, const char *pszPidfile)
    438432{
    439433    /*
  • trunk/src/VBox/Runtime/r3/win/process-win.cpp

    r27667 r27743  
    240240
    241241static int rtProcCreateAsUserHlp(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTUTF16 pwszExec, PRTUTF16 pwszCmdLine,
    242                                  PRTUTF16 pwszzBlock, STARTUPINFOW *pStartupInfo, PROCESS_INFORMATION *pProcInfo)
     242                                 PRTUTF16 pwszzBlock, DWORD dwCreationFlags,
     243                                 STARTUPINFOW *pStartupInfo, PROCESS_INFORMATION *pProcInfo)
    243244{
    244245    /** @todo On NT4 we need to enable the SeTcbPrivilege to act as part of the operating system. Otherwise
     
    271272                                   NULL,         /* pThreadAttributes */
    272273                                   TRUE,         /* fInheritHandles */
    273                                    CREATE_UNICODE_ENVIRONMENT, /* dwCreationFlags */
     274                                   dwCreationFlags,
    274275                                   pwszzBlock,
    275276                                   NULL,         /* pCurrentDirectory */
     
    307308                                                 pwszExec,
    308309                                                 pwszCmdLine,
    309                                                  CREATE_UNICODE_ENVIRONMENT, /* dwCreationFlags */
     310                                                 dwCreationFlags,
    310311                                                 pwszzBlock,
    311312                                                 NULL,                       /* pCurrentDirectory */
     
    338339    AssertPtrReturn(pszExec, VERR_INVALID_POINTER);
    339340    AssertReturn(*pszExec, VERR_INVALID_PARAMETER);
    340     AssertReturn(!(fFlags & ~RTPROC_FLAGS_DAEMONIZE), VERR_INVALID_PARAMETER);
     341    AssertReturn(!(fFlags & ~(RTPROC_FLAGS_DAEMONIZE_DEPRECATED | RTPROC_FLAGS_DETACHED)), VERR_INVALID_PARAMETER);
     342    AssertReturn(!(fFlags & RTPROC_FLAGS_DETACHED) || !phProcess, VERR_INVALID_PARAMETER);
    341343    AssertReturn(hEnv != NIL_RTENV, VERR_INVALID_PARAMETER);
    342344    AssertPtrReturn(papszArgs, VERR_INVALID_PARAMETER);
     
    451453                 * Get going...
    452454                 */
     455                DWORD               dwCreationFlags = CREATE_UNICODE_ENVIRONMENT;
     456                if (fFlags & RTPROC_FLAGS_DETACHED)
     457                    dwCreationFlags |= DETACHED_PROCESS;
     458
    453459                PROCESS_INFORMATION ProcInfo;
    454460                RT_ZERO(ProcInfo);
     
    460466                                       NULL,         /* pThreadAttributes */
    461467                                       TRUE,         /* fInheritHandles */
    462                                        CREATE_UNICODE_ENVIRONMENT, /* dwCreationFlags */
     468                                       dwCreationFlags,
    463469                                       pwszzBlock,
    464470                                       NULL,          /* pCurrentDirectory */
     
    484490                        {
    485491                            rc = rtProcCreateAsUserHlp(pwszUser, pwszPassword,
    486                                                        pwszExec, pwszCmdLine, pwszzBlock,
     492                                                       pwszExec, pwszCmdLine, pwszzBlock, dwCreationFlags
    487493                                                       &StartupInfo, &ProcInfo);
    488494
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette