diff options
author | Felix Janda <felix.janda@posteo.de> | 2013-08-10 20:18:18 +0200 |
---|---|---|
committer | Felix Janda <felix.janda@posteo.de> | 2013-08-10 20:18:18 +0200 |
commit | e49fe14705f78ba5a865ca4efd6ee53c78eeb253 (patch) | |
tree | 26b08f12af55b4ea4d08b30a2088e90ba04c6852 /lib | |
parent | 35104f47f9d36a9afb43de8c863137fe76c9ff3f (diff) | |
download | toybox-e49fe14705f78ba5a865ca4efd6ee53c78eeb253.tar.gz |
Add daemonize function to lib for klogd and syslogd
Diffstat (limited to 'lib')
-rw-r--r-- | lib/lib.h | 2 | ||||
-rw-r--r-- | lib/pending.c | 16 |
2 files changed, 18 insertions, 0 deletions
@@ -202,3 +202,5 @@ unsigned long get_int_value(const char *numstr, unsigned lowrange, unsigned high // grep helper functions char *astrcat (char *, char *); char *xastrcat (char *, char *); + +void daemonize(void); diff --git a/lib/pending.c b/lib/pending.c index fad1c656..79b9c91c 100644 --- a/lib/pending.c +++ b/lib/pending.c @@ -102,3 +102,19 @@ char *xastrcat (char *x, char *y) { 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); +} |