Browse Source

Cleaned up test that doesn't need manual intervention.
-Erik

Eric Andersen 22 years ago
parent
commit
53b4958525
1 changed files with 27 additions and 4 deletions
  1. 27 4
      test/signal/sigchld.c

+ 27 - 4
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");