diff options
author | Marius Halden <marius.h@lden.org> | 2015-11-27 04:20:30 +0100 |
---|---|---|
committer | Marius Halden <marius.h@lden.org> | 2015-11-27 04:20:30 +0100 |
commit | d058e41823a391bed47638734cafacdeb617f500 (patch) | |
tree | 945838110c11429607e7a44541d53d112c2c162b | |
parent | 03426c06e11948099da4b65ae25b9248e1e9e5d6 (diff) | |
download | svcmon-d058e41823a391bed47638734cafacdeb617f500.tar.gz svcmon-d058e41823a391bed47638734cafacdeb617f500.tar.bz2 svcmon-d058e41823a391bed47638734cafacdeb617f500.tar.xz |
Use procctl to signal all children instead of kill
-rw-r--r-- | scan.c | 21 |
1 files changed, 5 insertions, 16 deletions
@@ -235,19 +235,6 @@ reap_all() } } -void -signal_services(int sig) -{ - struct svc *np; - - TAILQ_FOREACH(np, &services, entries) { - if (np->supervisor != -1) { - if (kill(np->supervisor, sig) == -1) /* XXX: Handle failure better? */ - perror("kill()"); - } - } -} - int try_wait() { @@ -405,6 +392,7 @@ main(int argc, char **argv) { int kq, dir_fd, lock_fd; struct kevent evt[6]; + struct procctl_reaper_kill rk; pid_t mypid = getpid(); if (argc > 1) @@ -460,7 +448,6 @@ main(int argc, char **argv) } } if (revt[i].ident == SIGHUP || revt[i].ident == SIGINT || revt[i].ident == SIGTERM) { - fprintf(stderr, "Quit\n"); goto end; } } else if (revt[i].filter == EVFILT_TIMER) { @@ -475,7 +462,9 @@ main(int argc, char **argv) } end: - signal_services(SIGTERM); + rk.rk_sig = SIGTERM; + rk.rk_flags = REAPER_KILL_CHILDREN; + procctl(P_PID, mypid, PROC_REAP_KILL, &rk); if (close(kq) == -1) perror("close()"); @@ -486,7 +475,7 @@ end: reset_signals(); - reap_all(); + reap_all(); /* XXX: Maybe remove this for shorter shutdown? */ return 0; } |