Put back code mistakenly removed from copy of postmaster's
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 3 Apr 2005 00:02:03 +0000 (00:02 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 3 Apr 2005 00:02:03 +0000 (00:02 +0000)
daemonize routine, namely forcing stdin/stdout/stderr to point
to /dev/null.  Per Karl Denninger.

contrib/pg_autovacuum/pg_autovacuum.c

index 59ae3a112d2099ed586fd979936e4441157d51d7..0d409103b3f8c374e4707478b85f257da0ba7975 100644 (file)
@@ -18,6 +18,8 @@
 #ifdef WIN32
 #include <windows.h>
 #endif
+#include <sys/stat.h>
+#include <fcntl.h>
 
 #include "pg_autovacuum.h"
 
@@ -186,13 +188,13 @@ log_entry(const char *logentry, int level)
  * Function used to detach the pg_autovacuum daemon from the tty and go into
  * the background.
  *
- * This code is mostly ripped directly from pm_dameonize in postmaster.c with
- * unneeded code removed.
+ * This code is ripped directly from pmdaemonize in postmaster.c.
  */
 #ifndef WIN32
 static void
 daemonize(void)
 {
+       int                     i;
        pid_t           pid;
 
        pid = fork();
@@ -209,7 +211,8 @@ daemonize(void)
        }
 
 /* GH: If there's no setsid(), we hopefully don't need silent mode.
- * Until there's a better solution.  */
+ * Until there's a better solution.
+ */
 #ifdef HAVE_SETSID
        if (setsid() < 0)
        {
@@ -218,7 +221,11 @@ daemonize(void)
                _exit(1);
        }
 #endif
-
+       i = open(NULL_DEV, O_RDWR);
+       dup2(i, 0);
+       dup2(i, 1);
+       dup2(i, 2);
+       close(i);
 }
 #endif   /* WIN32 */