1. #include <fcntl.h>
    2. #include <stdlib.h>
    3. #include <unistd.h>
    4. class Daemon {
    5. public:
    6. Daemon(bool changeDir = false, bool closeStd = true) {
    7. int fd;
    8. if (fork() != 0) {
    9. exit(0);
    10. }
    11. setsid();
    12. if (changeDir) {
    13. chdir("/");
    14. }
    15. if (closeStd && (fd = open("/dev/null", O_RDWR, 0)) != -1) {
    16. dup2(fd, STDIN_FILENO);
    17. dup2(fd, STDOUT_FILENO);
    18. dup2(fd, STDERR_FILENO);
    19. if (fd > STDERR_FILENO) {
    20. close(fd);
    21. }
    22. }
    23. }
    24. };