about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2019-08-13 13:43:08 +0200
committerLeah Neukirchen <leah@vuxu.org>2019-08-13 13:43:08 +0200
commit76c42ecb39e57fcb42cd5b3046a6e2b66bea47ec (patch)
tree8ff439ff402d67ef251c4267fb4f8eca44e3e113
parent74184e7dc039d71260dc140fa4b3fa5428315a06 (diff)
downloadreap-76c42ecb39e57fcb42cd5b3046a6e2b66bea47ec.tar.gz
reap-76c42ecb39e57fcb42cd5b3046a6e2b66bea47ec.tar.xz
reap-76c42ecb39e57fcb42cd5b3046a6e2b66bea47ec.zip
add -v verbose flag
-rw-r--r--reap.c30
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);
 }