# HG changeset patch # User Felix Janda # Date 1376158698 -7200 # Node ID 893c86bbe452ac2a50dbec448a594ea53ec9c42a # Parent 00c7b6f4104a421bcb372e3a583512e5fb7bbecc Add daemonize function to lib for klogd and syslogd diff -r 00c7b6f4104a -r 893c86bbe452 lib/lib.h --- a/lib/lib.h Sat Aug 10 19:35:11 2013 +0200 +++ b/lib/lib.h Sat Aug 10 20:18:18 2013 +0200 @@ -202,3 +202,5 @@ // grep helper functions char *astrcat (char *, char *); char *xastrcat (char *, char *); + +void daemonize(void); diff -r 00c7b6f4104a -r 893c86bbe452 lib/pending.c --- a/lib/pending.c Sat Aug 10 19:35:11 2013 +0200 +++ b/lib/pending.c Sat Aug 10 20:18:18 2013 +0200 @@ -102,3 +102,19 @@ if (!x) error_exit ("xastrcat"); return x; } + +void daemonize(void) +{ + int fd = open("/dev/null", O_RDWR); + if (fd < 0) fd = xcreate("/", O_RDONLY, 0666); + + pid_t pid = fork(); + if (pid < 0) perror_exit("DAEMON: failed to fork"); + if (pid) exit(EXIT_SUCCESS); + + setsid(); + dup2(fd, 0); + dup2(fd, 1); + dup2(fd, 2); + if (fd > 2) close(fd); +} diff -r 00c7b6f4104a -r 893c86bbe452 toys/pending/klogd.c --- a/toys/pending/klogd.c Sat Aug 10 19:35:11 2013 +0200 +++ b/toys/pending/klogd.c Sat Aug 10 20:18:18 2013 +0200 @@ -67,19 +67,7 @@ sigatexit(handle_signal); if (toys.optflags & FLAG_c) set_log_level(TT.level); //set log level - if (!(toys.optflags & FLAG_n)) { //Make it daemon - pid_t pid; - int fd = open("/dev/null", O_RDWR); - if (fd < 0) fd = open("/", O_RDONLY, 0666); - if((pid = fork()) < 0) perror_exit("DAEMON: fail to fork"); - if (pid) exit(EXIT_SUCCESS); - - setsid(); - dup2(fd, 0); - dup2(fd, 1); - dup2(fd, 2); - if (fd > 2) close(fd); - } + if (!(toys.optflags & FLAG_n)) daemonize(); //Make it daemon if (CFG_KLOGD_SOURCE_RING_BUFFER) { syslog(LOG_NOTICE, "KLOGD: started with Kernel ring buffer as log source\n"); diff -r 00c7b6f4104a -r 893c86bbe452 toys/pending/syslogd.c --- a/toys/pending/syslogd.c Sat Aug 10 19:35:11 2013 +0200 +++ b/toys/pending/syslogd.c Sat Aug 10 20:18:18 2013 +0200 @@ -632,25 +632,6 @@ signal(SIGQUIT, signal_handler); } -static void syslog_daemon(void) -{ - int fd = open("/dev/null", O_RDWR); - if (fd < 0) fd = xcreate("/", O_RDONLY, 0666); - - pid_t pid = fork(); - if (pid < 0) perror_exit("DAEMON: failed to fork"); - if (pid) exit(EXIT_SUCCESS); - - setsid(); - dup2(fd, 0); - dup2(fd, 1); - dup2(fd, 2); - if (fd > 2) close(fd); - - //don't daemonize again if SIGHUP received. - toys.optflags |= FLAG_n; -} - void syslogd_main(void) { unsocks_t *tsd; @@ -688,7 +669,10 @@ setup_signal(); if (parse_config_file() == -1) goto clean_and_exit; open_logfiles(); - if (!flag_chk(FLAG_n)) syslog_daemon(); + if (!flag_chk(FLAG_n)) { + //don't daemonize again if SIGHUP received. + toys.optflags |= FLAG_n; + } { int pid_fd = open("/var/run/syslogd.pid", O_CREAT | O_WRONLY | O_TRUNC, 0666); if (pid_fd > 0) {