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 <jpazdziora@redhat.com>
This commit is contained in:
Miroslav Lichvar 2023-06-12 16:11:10 +02:00
parent b90d2c084f
commit 0db30fd0b1

7
main.c
View file

@ -331,6 +331,9 @@ go_daemon(void)
char message[1024]; char message[1024];
int r; int r;
/* Don't exit before the 'parent' */
waitpid(pid, NULL, 0);
close(pipefd[1]); close(pipefd[1]);
r = read(pipefd[0], message, sizeof (message)); r = read(pipefd[0], message, sizeof (message));
if (r) { if (r) {
@ -353,7 +356,9 @@ go_daemon(void)
if (pid < 0) { if (pid < 0) {
LOG_FATAL("fork() failed : %s", strerror(errno)); LOG_FATAL("fork() failed : %s", strerror(errno));
} else if (pid > 0) { } else if (pid > 0) {
exit(0); /* In the 'parent' */ /* In the 'parent' */
close(pipefd[1]);
exit(0);
} else { } else {
/* In the child we want to leave running as the daemon */ /* In the child we want to leave running as the daemon */