From fad14d6b61b6a9a543f9f417d529e1cba15be8a6 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 2 Jan 2002 11:51:52 +0000 Subject: New and improved! --- test/signal/sigchld.c | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) (limited to 'test') diff --git a/test/signal/sigchld.c b/test/signal/sigchld.c index cf82bb6b5..ad2970624 100644 --- a/test/signal/sigchld.c +++ b/test/signal/sigchld.c @@ -9,20 +9,30 @@ void test_handler(int signo) { - printf("caught signo: %d\n", signo); - fflush(stdout); + write(1, "caught SIGCHLD\n", 15); + return; } int main(void) { pid_t mypid; - int count = 0; struct sigaction siga; static sigset_t sigset; - mypid = getpid(); + /* Set up sighandling */ + sigfillset(&sigset); + siga.sa_handler = test_handler; + siga.sa_mask = sigset; + siga.sa_flags = 0; + if (sigaction(SIGCHLD, &siga, (struct sigaction *)NULL) != 0) { + fprintf(stderr, "sigaction choked: %s!", strerror(errno)); + exit(EXIT_FAILURE); + } + + /* Setup a child process to exercise the sig handling for us */ + mypid = getpid(); if (fork() == 0) { int i; @@ -30,32 +40,20 @@ int main(void) sleep(2); kill(mypid, SIGCHLD); } - exit(EXIT_SUCCESS); + _exit(EXIT_SUCCESS); } - sigfillset(&sigset); - - siga.sa_handler = test_handler; - siga.sa_mask = sigset; - siga.sa_flags = 0; - - if (sigaction(SIGCHLD, &siga, (struct sigaction *)NULL) != 0) { - fprintf(stderr, "sigaction choked: %s!", strerror(errno)); - exit(EXIT_FAILURE); - } - printf("waiting for a SIGCHLD\n"); - fflush(stdout); + /* Wait for signals */ + write(1, "waiting for a SIGCHLD\n",22); for(;;) { sleep(10); if (waitpid(-1, NULL, WNOHANG | WUNTRACED) > 0) break; - printf("after sleep %d\n", ++count); - fflush(stdout); + write(1, "after sleep\n", 12); } - printf("after loop\n"); - + printf("Bye-bye! All done!\n"); return 0; } -- cgit v1.2.3