#include #include #include #include int count = 0; void handler(int s) { count++; printf( "SIGNAL: %i\tPID: %i\n", s, getpid() ); fflush( stdout ); return; } void forkme() { // printf( "forking...\n" ); // fflush( stdout ); if( fork() == 0 ) { sleep( 1 ); printf( "child %i dies\n", getpid() ); fflush( stdout ); exit( 0 ); } // printf( "forked\n" ); // fflush( stdout ); return; } int main(void) { int i, k; signal( SIGCHLD, handler ); for( i = 0; i < 30; i++ ) { forkme(); } // printf( "waiting... (pid %i)\n", getpid() ); // fflush( stdout ); // sleep( 5 ); // printf( "waited! (pid %i)\n", getpid() ); // fflush( stdout ); k = 0; while( 1 ) { if( k != count ) { k = count; printf( "count %i\n", k ); fflush( stdout ); } } return( 0 ); }