VirtualBox

Changeset 57721 in vbox for trunk/src


Ignore:
Timestamp:
Sep 11, 2015 3:51:18 PM (9 years ago)
Author:
vboxsync
Message:

Additions/VBoxService: instead of relying on 'pidof', explicitly ask the VBoxService process to create the PID file

Location:
trunk/src/VBox/Additions
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxService/VBoxService.cpp

    r57659 r57721  
    7171int                  g_cVerbosity = 0;
    7272char                 g_szLogFile[RTPATH_MAX + 128] = "";
     73char                 g_szPidFile[RTPATH_MAX] = "";
    7374/** Logging parameters. */
    7475/** @todo Make this configurable later. */
     
    290291}
    291292
     293/*
     294 * Create the PID file.
     295 */
     296int vboxServiceCreatePidFile(const char *pszPidFile)
     297{
     298    RTFILE hFile;
     299    int rc = RTFileOpen(&hFile, pszPidFile, RTFILE_O_WRITE | RTFILE_O_TRUNCATE);
     300    if (RT_SUCCESS(rc))
     301    {
     302        char szPid[32];
     303        RTPROCESS Process = RTProcSelf();
     304        size_t cb = RTStrPrintf(szPid, sizeof(szPid), "%RU64\n", (uint64_t)Process);
     305        rc = RTFileWrite(hFile, szPid, cb, NULL);
     306        int rc2 = RTFileClose(hFile);
     307        if (RT_SUCCESS(rc))
     308            rc = rc2;
     309    }
     310    if (RT_FAILURE(rc))
     311        VBoxServiceError("Failed to create PID file: %Rrc\n", rc);
     312    return rc;
     313}
     314
    292315
    293316/**
     
    300323    RTPrintf("Usage:\n"
    301324             " %-12s [-f|--foreground] [-v|--verbose] [-l|--logfile <file>]\n"
    302              "              [-i|--interval <seconds>]\n"
     325             "              [-p|--pidfile <file>] [-i|--interval <seconds>]\n"
    303326             "              [--disable-<service>] [--enable-<service>]\n"
    304327             "              [--only-<service>] [-h|-?|--help]\n", g_pszProgName);
     
    314337             "    -f | --foreground       Don't daemonize the program. For debugging.\n"
    315338             "    -l | --logfile <file>   Enables logging to a file.\n"
     339             "    -p | --pidfile <file>   Write the process ID to a file.\n"
    316340             "    -v | --verbose          Increment the verbosity level. For debugging.\n"
    317341             "    -V | --version          Show version information.\n"
     
    908932            else if (MATCHES("logfile"))
    909933                psz = "l";
     934            else if (MATCHES("pidfile"))
     935                psz = "p";
    910936            else if (MATCHES("daemonized"))
    911937            {
     
    10041030                }
    10051031
     1032                case 'p':
     1033                {
     1034                    rc = VBoxServiceArgString(argc, argv, psz + 1, &i,
     1035                                              g_szPidFile, sizeof(g_szPidFile));
     1036                    if (rc)
     1037                        return rc;
     1038                    psz = NULL;
     1039                    break;
     1040                }
     1041
    10061042                default:
    10071043                {
     
    11251161#endif /* RT_OS_WINDOWS */
    11261162        rc = VBoxServiceStartServices();
     1163        if (RT_SUCCESS(rc))
     1164        {
     1165            if (strlen(g_szPidFile))
     1166                rc = vboxServiceCreatePidFile(g_szPidFile);
     1167        }
    11271168        rcExit = RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
    11281169        if (RT_SUCCESS(rc))
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp

    r57661 r57721  
    19771977                        char szVar[_1K];
    19781978                        char szValue[_16K];
    1979                         int rc2 = RTEnvGetByIndexEx(hEnv, iVar, szVar, sizeof(szVar), szValue, sizeof(szValue));
     1979                        rc2 = RTEnvGetByIndexEx(hEnv, iVar, szVar, sizeof(szVar), szValue, sizeof(szValue));
    19801980                        if (RT_SUCCESS(rc2))
    19811981                            VBoxServiceVerbose(4, "\t%s=%s\n", szVar, szValue);
  • trunk/src/VBox/Additions/linux/installer/vboxadd-service.sh

    r56860 r57721  
    9494if [ "$system" = "debian" ]; then
    9595    daemon() {
    96         start-stop-daemon --start --exec $1 -- $2
     96        start-stop-daemon --start --exec $1 -- $2 $3
    9797    }
    9898
     
    121121    fi
    122122    daemon() {
    123         start-stop-daemon --start --exec $1 -- $2
     123        start-stop-daemon --start --exec $1 -- $2 $3
    124124    }
    125125
     
    147147if [ "$system" = "slackware" -o "$system" = "other" ]; then
    148148    daemon() {
    149         $1 $2
     149        $1 $2 $3
    150150    }
    151151
     
    172172    . /etc/rc.d/init.d/functions
    173173    daemon() {
    174         loadproc $1 $2
     174        loadproc $1 $2 $3
    175175    }
    176176
     
    213213        }
    214214        testbinary
    215         daemon $binary > /dev/null
     215        daemon $binary --pidfile $PIDFILE > /dev/null
    216216        RETVAL=$?
    217         test $RETVAL -eq 0 && echo `pidof VBoxService` > $PIDFILE
    218217        succ_msg
    219218    fi
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