diff options
author | Leah Neukirchen <leah@vuxu.org> | 2019-08-13 13:43:08 +0200 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2019-08-13 13:43:08 +0200 |
commit | 76c42ecb39e57fcb42cd5b3046a6e2b66bea47ec (patch) | |
tree | 8ff439ff402d67ef251c4267fb4f8eca44e3e113 /reap.c | |
parent | 74184e7dc039d71260dc140fa4b3fa5428315a06 (diff) | |
download | reap-76c42ecb39e57fcb42cd5b3046a6e2b66bea47ec.tar.gz reap-76c42ecb39e57fcb42cd5b3046a6e2b66bea47ec.tar.xz reap-76c42ecb39e57fcb42cd5b3046a6e2b66bea47ec.zip |
add -v verbose flag
Diffstat (limited to 'reap.c')
-rw-r--r-- | reap.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/reap.c b/reap.c index 6b2628b..fe7b53b 100644 --- a/reap.c +++ b/reap.c @@ -19,7 +19,8 @@ #include <signal.h> sig_atomic_t do_reap; -sig_atomic_t do_wait; +int do_wait; +int verbose; // TERM/INT -> always reap // EXIT -> reap (default) or wait @@ -53,8 +54,15 @@ reap_children() pid_t pid = 0; while ((c = getc(file)) != EOF) { if (c == ' ') { + if (verbose) + fprintf(stderr, "reap: killing %ld\n", (long)pid); if (kill(pid, SIGTERM) == 0) didsth = 1; + else { + fprintf(stderr, "reap: kill %ld: %s\n", + (long)pid, strerror(errno)); + } + pid = 0; } else if (isdigit(c)) { pid = (pid * 10) + (c - '0'); @@ -73,13 +81,15 @@ int main(int argc, char *argv[]) { int c; - while ((c = getopt(argc, argv, "+w")) != -1) { + while ((c = getopt(argc, argv, "+vw")) != -1) { switch (c) { case 'w': do_wait = 1; break; + case 'v': verbose = 1; break; default: fprintf(stderr, -"Usage: %s [-w] COMMAND...\n" -"\t-w\twait for main command to finish (default: start reaping)\n", +"Usage: %s [-wv] COMMAND...\n" +"\t-w\twait for main command to finish (default: start reaping)\n" +"\t-v\tverbose\n", argv[0]); exit(1); } @@ -107,6 +117,9 @@ main(int argc, char *argv[]) { exit(111); } + if (verbose) + fprintf(stderr, "reap: spawned child %ld\n", (long)pid); + int wstatus; int exitcode = 111; @@ -124,8 +137,14 @@ main(int argc, char *argv[]) { } } else if (desc == pid) { exitcode = WEXITSTATUS(wstatus); + if (verbose) + fprintf(stderr, + "reap: reaped child %ld [status %d]\n", + (long)desc, exitcode); if (!do_wait) do_reap = 1; + } else if (verbose) { + fprintf(stderr, "reap: reaped descendant %ld\n", (long)desc); } if (do_reap) @@ -133,5 +152,8 @@ main(int argc, char *argv[]) { break; } + if (verbose) + fprintf(stderr, "reap: exiting [status %d]\n", exitcode); + exit(exitcode); } |