aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2015-11-27 04:20:30 +0100
committerMarius Halden <marius.h@lden.org>2015-11-27 04:20:30 +0100
commitd058e41823a391bed47638734cafacdeb617f500 (patch)
tree945838110c11429607e7a44541d53d112c2c162b
parent03426c06e11948099da4b65ae25b9248e1e9e5d6 (diff)
downloadsvcmon-d058e41823a391bed47638734cafacdeb617f500.tar.gz
svcmon-d058e41823a391bed47638734cafacdeb617f500.tar.bz2
svcmon-d058e41823a391bed47638734cafacdeb617f500.tar.xz
Use procctl to signal all children instead of kill
-rw-r--r--scan.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/scan.c b/scan.c
index c0a0d94..b43485b 100644
--- a/scan.c
+++ b/scan.c
@@ -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;
}