diff options
Diffstat (limited to 'lib/pending.c')
-rw-r--r-- | lib/pending.c | 16 |
1 files changed, 16 insertions, 0 deletions
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); +} |