OSDN Git Service

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

contrib/pg_autovacuum/pg_autovacuum.c

index 388b731..fdbd285 100644 (file)
@@ -4,7 +4,7 @@
  * Revisions by Christopher B. Browne, Liberty RMS
  * Win32 Service code added by Dave Page
  *
- * $PostgreSQL: pgsql/contrib/pg_autovacuum/pg_autovacuum.c,v 1.29 2005/01/26 22:25:13 tgl Exp $
+ * $PostgreSQL: pgsql/contrib/pg_autovacuum/pg_autovacuum.c,v 1.30 2005/04/03 00:01:51 tgl Exp $
  */
 
 #include "postgres_fe.h"
@@ -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 */