diff options
Diffstat (limited to 'initd/main.c')
-rw-r--r-- | initd/main.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/initd/main.c b/initd/main.c index 5ad265d..2d721a4 100644 --- a/initd/main.c +++ b/initd/main.c @@ -3,18 +3,7 @@ static void handle_signal(int signo) { - int status; - pid_t pid; - switch (signo) { - case SIGCHLD: - while ((pid = waitpid(-1, &status, WNOHANG)) > 0) { - status = WIFEXITED(status) ? WEXITSTATUS(status) : - EXIT_FAILURE; - - supervisor_handle_exited(pid, status); - } - break; case SIGTERM: supervisor_set_target(TGT_SHUTDOWN); break; @@ -31,13 +20,14 @@ static void handle_signal(int signo) int main(void) { struct sigaction act; + int status; + pid_t pid; supervisor_init(); memset(&act, 0, sizeof(act)); act.sa_handler = handle_signal; - sigaction(SIGCHLD, &act, NULL); sigaction(SIGTERM, &act, NULL); sigaction(SIGINT, &act, NULL); sigaction(SIGHUP, &act, NULL); @@ -50,7 +40,14 @@ int main(void) while (supervisor_process_queues()) ; - pause(); + pid = wait(&status); + + if (pid != -1) { + status = WIFEXITED(status) ? + WEXITSTATUS(status) : EXIT_FAILURE; + + supervisor_handle_exited(pid, status); + } } return EXIT_SUCCESS; |