From 0db30fd0b169b01890c428a3cfba611a222e3509 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Mon, 12 Jun 2023 16:11:10 +0200 Subject: [PATCH] main: wait for parent process to terminate When starting the daemon, wait in the grandparent process for the parent process to terminate before exiting to avoid systemd logging a warning "Supervising process $PID which is not our child". Waiting for the pipe to be closed by the kernel when the parent process exits is not sufficient. Reported-by: Jan Pazdziora --- main.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index 31e3c8f..3233707 100644 --- a/main.c +++ b/main.c @@ -331,6 +331,9 @@ go_daemon(void) char message[1024]; int r; + /* Don't exit before the 'parent' */ + waitpid(pid, NULL, 0); + close(pipefd[1]); r = read(pipefd[0], message, sizeof (message)); if (r) { @@ -353,7 +356,9 @@ go_daemon(void) if (pid < 0) { LOG_FATAL("fork() failed : %s", strerror(errno)); } else if (pid > 0) { - exit(0); /* In the 'parent' */ + /* In the 'parent' */ + close(pipefd[1]); + exit(0); } else { /* In the child we want to leave running as the daemon */