|
|
@ -1201,6 +1201,7 @@ static void *watchdog(void *arg) |
|
|
|
static struct option long_options[] = { |
|
|
|
static struct option long_options[] = { |
|
|
|
{"standalone", no_argument, 0, 'A'}, |
|
|
|
{"standalone", no_argument, 0, 'A'}, |
|
|
|
{"config", required_argument, 0, 'c'}, |
|
|
|
{"config", required_argument, 0, 'c'}, |
|
|
|
|
|
|
|
{"daemonise", no_argument, 0, 'D'}, |
|
|
|
{"ckdb-name", required_argument, 0, 'd'}, |
|
|
|
{"ckdb-name", required_argument, 0, 'd'}, |
|
|
|
{"group", required_argument, 0, 'g'}, |
|
|
|
{"group", required_argument, 0, 'g'}, |
|
|
|
{"handover", no_argument, 0, 'H'}, |
|
|
|
{"handover", no_argument, 0, 'H'}, |
|
|
@ -1218,6 +1219,7 @@ static struct option long_options[] = { |
|
|
|
#else |
|
|
|
#else |
|
|
|
static struct option long_options[] = { |
|
|
|
static struct option long_options[] = { |
|
|
|
{"config", required_argument, 0, 'c'}, |
|
|
|
{"config", required_argument, 0, 'c'}, |
|
|
|
|
|
|
|
{"daemonise", no_argument, 0, 'D'}, |
|
|
|
{"group", required_argument, 0, 'g'}, |
|
|
|
{"group", required_argument, 0, 'g'}, |
|
|
|
{"handover", no_argument, 0, 'H'}, |
|
|
|
{"handover", no_argument, 0, 'H'}, |
|
|
|
{"help", no_argument, 0, 'h'}, |
|
|
|
{"help", no_argument, 0, 'h'}, |
|
|
@ -1267,7 +1269,7 @@ int main(int argc, char **argv) |
|
|
|
ckp.initial_args[ckp.args] = strdup(argv[ckp.args]); |
|
|
|
ckp.initial_args[ckp.args] = strdup(argv[ckp.args]); |
|
|
|
ckp.initial_args[ckp.args] = NULL; |
|
|
|
ckp.initial_args[ckp.args] = NULL; |
|
|
|
|
|
|
|
|
|
|
|
while ((c = getopt_long(argc, argv, "Ac:d:g:HhkLl:n:PpS:s:", long_options, &i)) != -1) { |
|
|
|
while ((c = getopt_long(argc, argv, "Ac:Dd:g:HhkLl:n:PpS:s:", long_options, &i)) != -1) { |
|
|
|
switch (c) { |
|
|
|
switch (c) { |
|
|
|
case 'A': |
|
|
|
case 'A': |
|
|
|
ckp.standalone = true; |
|
|
|
ckp.standalone = true; |
|
|
@ -1275,6 +1277,9 @@ int main(int argc, char **argv) |
|
|
|
case 'c': |
|
|
|
case 'c': |
|
|
|
ckp.config = optarg; |
|
|
|
ckp.config = optarg; |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
case 'D': |
|
|
|
|
|
|
|
ckp.daemon = true; |
|
|
|
|
|
|
|
break; |
|
|
|
case 'd': |
|
|
|
case 'd': |
|
|
|
ckp.ckdb_name = optarg; |
|
|
|
ckp.ckdb_name = optarg; |
|
|
|
break; |
|
|
|
break; |
|
|
@ -1500,6 +1505,20 @@ int main(int argc, char **argv) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ckp.daemon) { |
|
|
|
|
|
|
|
int fd; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (fork()) |
|
|
|
|
|
|
|
exit(0); |
|
|
|
|
|
|
|
setsid(); |
|
|
|
|
|
|
|
fd = open("/dev/null",O_RDWR, 0); |
|
|
|
|
|
|
|
if (fd != -1) { |
|
|
|
|
|
|
|
dup2(fd, STDIN_FILENO); |
|
|
|
|
|
|
|
dup2(fd, STDOUT_FILENO); |
|
|
|
|
|
|
|
dup2(fd, STDERR_FILENO); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
write_namepid(&ckp.main); |
|
|
|
write_namepid(&ckp.main); |
|
|
|
open_process_sock(&ckp, &ckp.main, &ckp.main.us); |
|
|
|
open_process_sock(&ckp, &ckp.main, &ckp.main.us); |
|
|
|
launch_logger(&ckp.main); |
|
|
|
launch_logger(&ckp.main); |
|
|
|