From 53b4958525785698539e0846a6fe6b4086148858 Mon Sep 17 00:00:00 2001 From: Eric Andersen 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 +#include +#include #include #include +#include #include + 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