int ntimes=0;
main(int argc, char *argv[]) {
int pid,ppid;
int p_action( ), c_action( );
signal(SIGUSR1 , p_action);
switch(pid=fork( )) {
case
-1: perror("fork failed?);
exit
(1);
case
0: signal(SIGUSR1,c_action);
ppid=getppid( );
for
( ; ; ) ;
default: {
for
( ; ; ) {
pause;
sleep
(1);
kill
(pid,SIGUSR1);
}
}
}
}
p_action( ) {
printf
(
"parent caught signal #%d\n"
,++ntimes);
}
c_action( ) {
printf
(
"child caught signal #%d\n"
,++ntimes/*, ++ltimes*/);
int ppid;
ppid = getppid();
kill
(ppid, SIGUSR1);
sleep
(3);
}