git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 5/5] daemon: new option --detach to run git-daemon in background

From
MLMatthias Lederhofer <matled@gmx.net>
Date
Jul 13, 2006, 10:32 UTC
Message-ID
<E1G0znB-0002If-8A@moooo.ath.cx>
In-Reply-To
<E1G0zj7-0001c1-8q@moooo.ath.cx>
Signed-off-by: Matthias Lederhofer <matled@gmx.net>
---
 daemon.c |   32 +++++++++++++++++++++++++++++++-
 1 files changed, 31 insertions(+), 1 deletions(-)
diff --git a/daemon.c b/daemon.c
index 4b85930..9f4bc20 100644
--- a/daemon.c
+++ b/daemon.c
@@ -662,6 +662,27 @@ static int service_loop(int socknum, int
 	}
 }
 
+static void daemonize(void)
+{
+	int devnull = -1;
+	switch (fork()) {
+		case 0:
+			break;
+		case -1:
+			die("fork failed: %s", strerror(errno));
+		default:
+			exit(0);
+	}
+	if (setsid() == -1)
+		die("setsid failed: %s", strerror(errno));
+	if ((devnull = open("/dev/null", O_RDWR, 0)) == -1)
+		die("open /dev/null failed: %s", strerror(errno));
+	if (dup2(devnull, 0) != 0 ||
+		dup2(devnull, 1) != 1 ||
+		dup2(devnull, 2) != 2)
+		die("dup2 failed: %s", strerror(errno));
+}
+
 /* if any standard file descriptor is missing open it to /dev/null */
 static void sanitize_stdfds(void)
 {
@@ -705,6 +726,7 @@ int main(int argc, char **argv)
 	int port = DEFAULT_GIT_PORT;
 	int inetd_mode = 0;
 	const char *pid_file = NULL;
+	int detach = 0;
 	int i;
 
 	/* Without this we cannot rely on waitpid() to tell
@@ -773,6 +795,11 @@ int main(int argc, char **argv)
 			pid_file = arg + 11;
 			continue;
 		}
+		if (!strcmp(arg, "--detach")) {
+			detach = 1;
+			log_syslog = 1;
+			continue;
+		}
 		if (!strcmp(arg, "--")) {
 			ok_paths = &argv[i+1];
 			break;
@@ -805,7 +832,10 @@ int main(int argc, char **argv)
 		return execute(peer);
 	}
 
-	sanitize_stdfds();
+	if (detach)
+		daemonize();
+	else
+		sanitize_stdfds();
 
 	if (pid_file)
 		store_pid(pid_file);
-- 
1.4.1.gb16f
Previous: Matthias LederhoferNext: Edgar Toernig
Message 19 of 23 in “git-daemon problem”
  1. Matthias LederhoferJul 11, 2006
  2. Junio C HamanoJul 11, 2006
  3. Junio C HamanoJul 11, 2006
  4. Junio C HamanoJul 12, 2006
  5. Matthias LederhoferJul 12, 2006
  6. Junio C HamanoJul 13, 2006
  7. Matthias LederhoferJul 13, 2006
  8. Andre NollJul 13, 2006
  9. Matthias LederhoferJul 13, 2006
  10. 1/5 daemon: use a custom die routine with syslogMatthias Lederhofer, Jul 13, 2006
  11. 2/5 daemon: if one of the standard fds is missing open it to /dev/nullMatthias Lederhofer, Jul 13, 2006
  12. Edgar ToernigJul 13, 2006
  13. Matthias LederhoferJul 13, 2006
  14. Uwe ZeisbergerJul 13, 2006
  15. Morten WelinderJul 13, 2006
  16. Matthias LederhoferJul 13, 2006
  17. 1/5 daemon: if one of the standard fds is missing open it to /dev/nullMatthias Lederhofer, Jul 13, 2006
  18. 4/5 daemon: new option --pid-file=<path> to store the pidMatthias Lederhofer, Jul 13, 2006
  19. 5/5 daemon: new option --detach to run git-daemon in backgroundMatthias Lederhofer, Jul 13, 2006
  20. Edgar ToernigJul 13, 2006
  21. Matthias LederhoferJul 13, 2006
  22. 3/5 upload-pack: ignore write errors to stderrMatthias Lederhofer, Jul 13, 2006
  23. daemon: documentation for --reuseaddr, --detach and --pid-fileMatthias Lederhofer, Jul 14, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.