/********************************************************** * * badpingpong.c * * Started by Jeff Ondich on 4/25/02 * Last modified on 4/26/02 * * For exam due 5/3/02. * This program tries to send signals alternately * between parent and child, but it has a problem. * **********************************************************/ #include #include #include #include #include void parent_handler(); void child_handler(); void interrupt_handler(); int main( void ) { int pid; if( signal(SIGINT,interrupt_handler) != SIG_DFL ) fprintf( stderr, "Trouble setting SIGINT handler.\n" ); /* Fork */ pid = fork(); if( pid == -1 ) { perror( "fork() failure" ); } /* Parent */ else if( pid != 0 ) { if( signal(SIGUSR1,parent_handler) != SIG_DFL ) fprintf( stderr, "Trouble setting parent's signal handler.\n" ); while( 1 ) { pause(); kill( pid, SIGUSR1 ); } } /* Child */ else { fprintf( stderr, "Child\n" ); fflush( stderr ); if( signal(SIGUSR1,child_handler) != SIG_DFL ) fprintf( stderr, "Trouble setting child's signal handler.\n" ); fprintf( stderr, "Child2\n" ); fflush( stderr ); while( 1 ) { kill( getppid(), SIGUSR1 ); pause(); } } return 0; } void interrupt_handler( int sig ) { exit( 0 ); } void parent_handler( int sig ) { fprintf( stderr, "PONG. Parent got signal %d from child.\n", sig ); } void child_handler( int sig ) { fprintf( stderr, "PING. Child got signal %d from parent\n", sig ); }