From 53b4958525785698539e0846a6fe6b4086148858 Mon Sep 17 00:00:00 2001
From: Eric Andersen <andersen@codepoet.org>
Date: Wed, 2 Jan 2002 06:52:04 +0000
Subject: Cleaned up test that doesn't need manual intervention.  -Erik

---
 test/signal/sigchld.c | 31 +++++++++++++++++++++++++++----
 1 file changed, 27 insertions(+), 4 deletions(-)

(limited to 'test')

diff --git a/test/signal/sigchld.c b/test/signal/sigchld.c
index 05f4d1594..cf82bb6b5 100644
--- a/test/signal/sigchld.c
+++ b/test/signal/sigchld.c
@@ -1,34 +1,57 @@
 #include <stdlib.h>
+#include <string.h>
+#include <errno.h>
 #include <stdio.h>
 #include <sys/signal.h>
+#include <sys/wait.h>
 #include <unistd.h>
 
+
 void test_handler(int signo) 
 {
-    fprintf(stderr, "caught signo: %d\n", signo);
+    printf("caught signo: %d\n", signo);
+    fflush(stdout);
 }
 
 
 int main(void) 
 {
+    pid_t mypid;
     int count = 0;
     struct sigaction siga;
     static sigset_t sigset;
 
+    mypid = getpid();
+
+    if (fork() == 0) {
+	int i;
+
+	for (i=0; i < 3; i++) {
+	    sleep(2);
+	    kill(mypid, SIGCHLD);
+	}
+	exit(EXIT_SUCCESS);
+    }
+
     sigfillset(&sigset);
 
     siga.sa_handler = test_handler;
     siga.sa_mask = sigset;
     siga.sa_flags = 0;
 
-    if (0 != sigaction(SIGCHLD, &siga, (struct sigaction *)NULL)) {
-	fprintf(stderr, "ack!");
+    if (sigaction(SIGCHLD, &siga, (struct sigaction *)NULL) != 0) {
+	fprintf(stderr, "sigaction choked: %s!", strerror(errno));
+	exit(EXIT_FAILURE);
     }
-    printf("give me a SIGCHLD\n");
+    printf("waiting for a SIGCHLD\n");
+    fflush(stdout);
 
     for(;;) {
 	sleep(10);
+	if (waitpid(-1, NULL, WNOHANG | WUNTRACED) > 0)
+	    break;
 	printf("after sleep %d\n", ++count);
+	fflush(stdout);
     }
 
     printf("after loop\n");
-- 
cgit v1.2.3