mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-03 21:35:06 -05:00
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:
7
main.c
7
main.c
@@ -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 */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user