confusion about signals
   
    Stephen Weeks
     
    sweeks@acm.org
       
    Sun, 17 Mar 2002 13:56:25 -0800
    
    
  
The following C program forks off a child that immediately exits and
hence causes a SIGCHLD to be sent to the parent.  The parent handles
SIGCHLD and sets handled to 1.  Therefore, I believe that the program
should always print
handled = 1
However, it doesn't always do this.  In fact, most of the time it
prints 
handled = 0
Can anyone explain why?
--------------------------------------------------------------------------------
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
volatile int handled = 0;
static void handler(int sig) {
	handled = 1;
}
int main(void) {
	struct sigaction act;
	int i;
	act.sa_flags = 0;
	act.sa_handler = &handler;
	sigemptyset(&act.sa_mask);
	sigaction(SIGCHLD, &act, NULL);
	if (0 != fork()) {
		/* Parent.  Wait on SIGCHLD from child. */
		sigsuspend(NULL);
		fprintf(stderr, "handled = %d\n", handled);
	}
	return 0;
}