Просмотр исходного кода

Properly daemonize and dup file descriptors to /dev/null.

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1487 fd59a12c-fef9-0310-b244-a6a79926bd2f
Steven Dake 18 лет назад
Родитель
Сommit
f755b34a6c
1 измененных файлов с 19 добавлено и 1 удалено
  1. 19 1
      exec/main.c

+ 19 - 1
exec/main.c

@@ -280,7 +280,7 @@ static void aisexec_mempool_init (void)
 
 static void aisexec_tty_detach (void)
 {
-	int lpc;
+	int lpc, fd;
 	struct rlimit oflimits;
 
 	/*
@@ -307,6 +307,24 @@ static void aisexec_tty_detach (void)
 			exit (0);
 			break;
 	}
+
+	/* Create new session */
+	setsid();
+
+	/* 
+	 * Map stdin/out/err to /dev/null.
+	 */
+	fd = open("/dev/null", O_RDWR);
+	if (fd >= 0) {
+		/* dup2 to 0 / 1 / 2 (stdin / stdout / stderr) */
+		dup2(fd, STDIN_FILENO);  /* 0 */
+		dup2(fd, STDOUT_FILENO); /* 1 */
+		dup2(fd, STDERR_FILENO); /* 2 */
+
+		/* Should be 0, but just in case it isn't... */
+		if (fd > 2) 
+			close(fd);
+	}
 }
 
 static void aisexec_setscheduler (void)