#include <stdio.h>

#include <signal.h>

#include <sys/signal.h>

 

void handler( int sig )

{

   /* do nothing */

}

 

void main( void )

{

   if( fork() == 0 )

   {

      for(;;)

      {

         static int cnt = 1;

         fprintf( stdout, " Child [%d]: sleep(2)\n", cnt );

         sleep( 2 );

         fprintf( stdout, " Child [%d]: sending SIGUSR1\n\n", cnt++ );

         kill( getppid(), SIGUSR1 );

      }

   }

   else

   {

      sigset( SIGUSR1, handler );

      for(;;)

      {

         static int unslept, cnt = 1;

         fprintf( stderr, "Parent [%d]: sleep(10)\n", cnt );

         unslept = sleep( 10 );

         fprintf( stderr, "Parent [%d]: done (%d unslept)\n", cnt++, unslept );

      }

   }

}