Mercurial > hg > toybox
changeset 995:893c86bbe452
Add daemonize function to lib for klogd and syslogd
author | Felix Janda <felix.janda@posteo.de> |
---|---|
date | Sat, 10 Aug 2013 20:18:18 +0200 |
parents | 00c7b6f4104a |
children | bd8be96cd43d |
files | lib/lib.h lib/pending.c toys/pending/klogd.c toys/pending/syslogd.c |
diffstat | 4 files changed, 23 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- 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);
--- 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); +}
--- 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");
--- 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) {