diff options
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); +} |