/* * daemon.c - "daemonize" a process */ #include "config.h" int daemon(int nochdir, int noclose) { int nullfd; pid_t f; if (!nochdir) { if (chdir("/")) return -1; } if (!noclose) { if ((nullfd = open("/dev/null", O_RDWR)) < 0 || dup2(nullfd, 0) < 0 || dup2(nullfd, 1) < 0 || dup2(nullfd, 2) < 0) return -1; close(nullfd); } f = fork(); if (f < 0) return -1; else if (f > 0) _exit(0); #ifdef HAVE_SETSID return setsid(); #else return 0; #endif }