| /* | |
| * 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 | |
| } |