staging: usbip: add "-P" / "--pid" option to save usbipd process id
Introduce option "-P" / "--pid" to request that usbipd save its PID to a file while running. Signed-off-by: Anthony Foiani <anthony.foiani@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f6f92a300e
commit
9ead219b31
|
@ -50,6 +50,8 @@
|
|||
|
||||
#define MAIN_LOOP_TIMEOUT 10
|
||||
|
||||
#define DEFAULT_PID_FILE "/var/run/" PROGNAME ".pid"
|
||||
|
||||
static const char usbip_version_string[] = PACKAGE_STRING;
|
||||
|
||||
static const char usbipd_help_string[] =
|
||||
|
@ -60,6 +62,10 @@ static const char usbipd_help_string[] =
|
|||
" -d, --debug\n"
|
||||
" Print debugging information.\n"
|
||||
"\n"
|
||||
" -PFILE, --pid FILE\n"
|
||||
" Write process id to FILE.\n"
|
||||
" If no FILE specified, use " DEFAULT_PID_FILE "\n"
|
||||
"\n"
|
||||
" -h, --help\n"
|
||||
" Print this help.\n"
|
||||
"\n"
|
||||
|
@ -439,6 +445,31 @@ static void set_signal(void)
|
|||
sigaction(SIGCLD, &act, NULL);
|
||||
}
|
||||
|
||||
static const char *pid_file;
|
||||
|
||||
static void write_pid_file()
|
||||
{
|
||||
if (pid_file) {
|
||||
dbg("creating pid file %s", pid_file);
|
||||
FILE *fp = fopen(pid_file, "w");
|
||||
if (!fp) {
|
||||
err("pid_file: %s: %d (%s)",
|
||||
pid_file, errno, strerror(errno));
|
||||
return;
|
||||
}
|
||||
fprintf(fp, "%d\n", getpid());
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
static void remove_pid_file()
|
||||
{
|
||||
if (pid_file) {
|
||||
dbg("removing pid file %s", pid_file);
|
||||
unlink(pid_file);
|
||||
}
|
||||
}
|
||||
|
||||
static int do_standalone_mode(int daemonize)
|
||||
{
|
||||
struct addrinfo *ai_head;
|
||||
|
@ -465,6 +496,7 @@ static int do_standalone_mode(int daemonize)
|
|||
usbip_use_syslog = 1;
|
||||
}
|
||||
set_signal();
|
||||
write_pid_file();
|
||||
|
||||
ai_head = do_getaddrinfo(NULL, PF_UNSPEC);
|
||||
if (!ai_head) {
|
||||
|
@ -527,6 +559,7 @@ int main(int argc, char *argv[])
|
|||
static const struct option longopts[] = {
|
||||
{ "daemon", no_argument, NULL, 'D' },
|
||||
{ "debug", no_argument, NULL, 'd' },
|
||||
{ "pid", optional_argument, NULL, 'P' },
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{ "version", no_argument, NULL, 'v' },
|
||||
{ NULL, 0, NULL, 0 }
|
||||
|
@ -540,6 +573,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
int daemonize = 0;
|
||||
int opt, rc = -1;
|
||||
pid_file = NULL;
|
||||
|
||||
usbip_use_stderr = 1;
|
||||
usbip_use_syslog = 0;
|
||||
|
@ -549,7 +583,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
cmd = cmd_standalone_mode;
|
||||
for (;;) {
|
||||
opt = getopt_long(argc, argv, "Ddhv", longopts, NULL);
|
||||
opt = getopt_long(argc, argv, "DdP::hv", longopts, NULL);
|
||||
|
||||
if (opt == -1)
|
||||
break;
|
||||
|
@ -564,6 +598,9 @@ int main(int argc, char *argv[])
|
|||
case 'h':
|
||||
cmd = cmd_help;
|
||||
break;
|
||||
case 'P':
|
||||
pid_file = optarg ? optarg : DEFAULT_PID_FILE;
|
||||
break;
|
||||
case 'v':
|
||||
cmd = cmd_version;
|
||||
break;
|
||||
|
@ -577,6 +614,7 @@ int main(int argc, char *argv[])
|
|||
switch (cmd) {
|
||||
case cmd_standalone_mode:
|
||||
rc = do_standalone_mode(daemonize);
|
||||
remove_pid_file();
|
||||
break;
|
||||
case cmd_version:
|
||||
printf(PROGNAME " (%s)\n", usbip_version_string);
|
||||
|
|
Loading…
Reference in a new issue