Changeset 2743


Ignore:
Timestamp:
Aug 14, 2007, 4:02:50 AM (15 years ago)
Author:
joshe
Message:

Add a pidfile command-line argument.

Location:
trunk/daemon
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/daemon/daemon.c

    r2415 r2743  
    5151
    5252static void usage       ( const char *, ... );
    53 static void readargs    ( int, char **, int *, int *, char ** );
     53static void readargs    ( int, char **, int *, int *, char **, char ** );
    5454static int  trylocksock ( const char * );
    5555static int  getlock     ( const char * );
     
    5858static void setupsigs   ( struct event_base * );
    5959static void gotsig      ( int, short, void * );
     60static int  savepid     ( const char * );
    6061
    6162static int  gl_lockfd               = -1;
     
    6364static int  gl_sockfd               = -1;
    6465static char gl_sockpath[MAXPATHLEN] = "";
     66static char gl_pidfile[MAXPATHLEN]  = "";
    6567
    6668int
     
    6971    struct event_base * evbase;
    7072    int                 nofork, debug, sockfd;
    71     char              * sockpath;
     73    char              * sockpath, * pidfile;
    7274
    7375    setmyname( argv[0] );
    74     readargs( argc, argv, &nofork, &debug, &sockpath );
     76    readargs( argc, argv, &nofork, &debug, &sockpath, &pidfile );
    7577
    7678    if( !nofork )
     
    8486    }
    8587
     88    if( 0 > savepid( pidfile ) )
     89        exit( 1 );
    8690    atexit( exitcleanup );
    8791    sockfd = trylocksock( sockpath );
     
    119123
    120124    printf(
    121   "usage: %s [-dfh]\n"
     125  "usage: %s [-dfh] [-p file] [-s file]\n"
    122126  "\n"
    123127  "Transmission %s http://transmission.m0k.org/\n"
     
    127131  "  -f --foreground           Run in the foreground and log to stderr\n"
    128132  "  -h --help                 Display this message and exit\n"
     133  "  -p --pidfile <path>       Save the process id in a file at <path>\n"
    129134  "  -s --socket <path>        Place the socket file at <path>\n"
    130135  "\n"
     
    135140
    136141void
    137 readargs( int argc, char ** argv, int * nofork, int * debug, char ** sock )
    138 {
    139     char optstr[] = "dfhs:";
     142readargs( int argc, char ** argv, int * nofork, int * debug, char ** sock,
     143          char ** pidfile )
     144{
     145    char optstr[] = "dfhp:s:";
    140146    struct option longopts[] =
    141147    {
     
    143149        { "foreground",         no_argument,       NULL, 'f' },
    144150        { "help",               no_argument,       NULL, 'h' },
     151        { "pidfile",            required_argument, NULL, 'p' },
    145152        { "socket",             required_argument, NULL, 's' },
    146153        { NULL, 0, NULL, 0 }
     
    148155    int opt;
    149156
    150     *nofork = 0;
    151     *debug  = 0;
    152     *sock   = NULL;
     157    *nofork    = 0;
     158    *debug     = 0;
     159    *sock      = NULL;
     160    *pidfile   = NULL;
    153161
    154162    while( 0 <= ( opt = getopt_long( argc, argv, optstr, longopts, NULL ) ) )
     
    161169            case 'f':
    162170                *nofork = 1;
     171                break;
     172            case 'p':
     173                *pidfile = optarg;
    163174                break;
    164175            case 's':
     
    295306        close( gl_lockfd );
    296307    }
     308    if( 0 != gl_pidfile[0] )
     309    {
     310        unlink( gl_pidfile );
     311    }
    297312}
    298313
     
    339354    }
    340355}
     356
     357int
     358savepid( const char * file )
     359{
     360    FILE * pid;
     361
     362    pid = fopen( file, "wb" );
     363    if( NULL == pid )
     364    {
     365        errnomsg( "failed to open pid file: %s", file );
     366        return -1;
     367    }
     368
     369    if( 0 > fprintf( pid, "%d\n", (int) getpid() ) )
     370    {
     371        errnomsg( "failed to write pid to file: %s", file );
     372        fclose( pid );
     373        unlink( file );
     374        return -1;
     375    }
     376
     377    fclose( pid );
     378    strlcpy( gl_pidfile, file, sizeof gl_pidfile );
     379
     380    return 0;
     381}
  • trunk/daemon/transmission-daemon.1

    r1924 r2743  
    3333.Nm
    3434.Op Fl df
     35.Op Fl p Ar pid-file
    3536.Op Fl s Ar socket-file
    3637.Ek
     
    5051.It Fl h Fl -help
    5152Print command-line option descriptions.
     53.It Fl p Fl -pidfile Ar pid-file
     54Save the daemon's process ID in
     55.Ar pid-file .
     56.It Fl s Fl -socket Ar socket-file
     57Create the unix-domain socket file at
     58.Ar socket-file
     59instead of the platform-dependent default location.
    5260.El
    5361.Sh FILES
Note: See TracChangeset for help on using the changeset viewer.