]> git.ozlabs.org Git - ccan/blobdiff - ccan/daemonize/daemonize.c
daemonize: set stderr to /dev/null.
[ccan] / ccan / daemonize / daemonize.c
index ca4aafc8fa99c403b8396dd0d871d3840e536e46..ff12bfce3f7d15dfcab1053f7a673cae23963125 100644 (file)
@@ -3,6 +3,7 @@
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <fcntl.h>
 
 /* This code is based on Stevens Advanced Programming in the UNIX
  * Environment. */
@@ -21,6 +22,14 @@ bool daemonize(void)
        close(STDOUT_FILENO);
        close(STDERR_FILENO);
 
+       /* Many routines write to stderr; that can cause chaos if used
+        * for something else, so set it here. */
+       if (open("/dev/null", O_WRONLY) != 0)
+               return false;
+       if (dup2(0, STDERR_FILENO) != STDERR_FILENO)
+               return false;
+       close(0);
+
        /* Session leader so ^C doesn't whack us. */
        setsid();
        /* Move off any mount points we might be in. */