Hi. I was trying to use daemon() library call to daemonize the process, and found out that it is not suitable for the process that have threads: all the threads are simply being killed. The reason is that the daemon() function does fork(), then exit() in parent and setsid() in child, which is a bit ugly, and doesn't work with threads (fork() doesn't fork threads). I've found no solution to that, and just hacked up one instead. The attached patch adds the PR_DETACH prctl command, which detaches the process from its parent. With that, the daemon() function can be implemented without the fork/exit/setsid hacks, and here is an example of it: --- #include #include #include #include #include #include #include #ifndef PR_DETACH #define PR_DETACH 35 #endif int daemon2(int nochdir, int noclose) { int err, fd; err = prctl(PR_DETACH); if (err == -1) { if (errno == EINVAL) errno = ENOTSUP; return -1; } fd = open("/dev/tty", O_RDWR); if (fd != -1) { ioctl(fd, TIOCNOTTY, NULL); close(fd); } if (!nochdir && chdir("/") == -1) return -1; if (!noclose) { fd = open("/dev/null", O_RDWR, 0); if (fd == -1) return -1; if (dup2(fd, STDIN_FILENO) == -1) return -1; if (dup2(fd, STDOUT_FILENO) == -1) return -1; if (dup2(fd, STDERR_FILENO) == -1) return -1; if (fd > 2) close(fd); } return 0; } --- With this implementation, all threads survive the daemonization. Thoughts?