aboutsummaryrefslogtreecommitdiffstats
path: root/scan.c
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2015-11-27 04:31:37 +0100
committerMarius Halden <marius.h@lden.org>2015-11-27 04:31:37 +0100
commite1939b04348e5467e8c85c6a1a05e68484101d41 (patch)
treeb5a015c8292844e406aa370684ea2e0682e7898c /scan.c
parentd058e41823a391bed47638734cafacdeb617f500 (diff)
downloadsvcmon-e1939b04348e5467e8c85c6a1a05e68484101d41.tar.gz
svcmon-e1939b04348e5467e8c85c6a1a05e68484101d41.tar.bz2
svcmon-e1939b04348e5467e8c85c6a1a05e68484101d41.tar.xz
Error checking and such
Diffstat (limited to 'scan.c')
-rw-r--r--scan.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/scan.c b/scan.c
index b43485b..fc6f877 100644
--- a/scan.c
+++ b/scan.c
@@ -393,6 +393,7 @@ main(int argc, char **argv)
int kq, dir_fd, lock_fd;
struct kevent evt[6];
struct procctl_reaper_kill rk;
+ struct procctl_reaper_status rs;
pid_t mypid = getpid();
if (argc > 1)
@@ -462,9 +463,16 @@ main(int argc, char **argv)
}
end:
- rk.rk_sig = SIGTERM;
- rk.rk_flags = REAPER_KILL_CHILDREN;
- procctl(P_PID, mypid, PROC_REAP_KILL, &rk);
+ if (procctl(P_PID, mypid, PROC_REAP_STATUS, &rs) != -1) {
+ if (rs.rs_children > 0) {
+ rk.rk_sig = SIGTERM;
+ rk.rk_flags = REAPER_KILL_CHILDREN;
+ if (procctl(P_PID, mypid, PROC_REAP_KILL, &rk))
+ perror("procctl()");
+ }
+ } else {
+ perror("procctl()");
+ }
if (close(kq) == -1)
perror("close()");
@@ -475,6 +483,7 @@ end:
reset_signals();
+ fprintf(stderr, "Waiting for children to exit\n");
reap_all(); /* XXX: Maybe remove this for shorter shutdown? */
return 0;