X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fdaemonize%2Fdaemonize.c;h=3c0a53a8bfa11a25a6e0685dc4c7f7ed72a4ab10;hp=ca4aafc8fa99c403b8396dd0d871d3840e536e46;hb=cc2d609dfca7192305ad477b8c2b52cfdc1aa9be;hpb=cd13fd53487ba6f10b78ab1ffd625cb3da7ab22a diff --git a/ccan/daemonize/daemonize.c b/ccan/daemonize/daemonize.c index ca4aafc8..3c0a53a8 100644 --- a/ccan/daemonize/daemonize.c +++ b/ccan/daemonize/daemonize.c @@ -1,8 +1,10 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ #include #include #include #include #include +#include /* This code is based on Stevens Advanced Programming in the UNIX * Environment. */ @@ -21,6 +23,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. */