- 论坛徽章:
- 0
|
#include stdio.h>
#include stdlib.h>
#include unistd.h>
#include sys/types.h>
#include sys/wait.h>
static void FC_exit(int sig)
{
printf("test [%d][%d] exit[%d]\n",getppid(),getpid(),sig);
return ;
}
int main( void )
{
struct sigaction act;
sigset_t sigset;
pid_t childpid;
int status;
/* set siguser1 funcation */
act.sa_handler = (void (*)()) FC_exit;
sigemptyset (&act.sa_mask);
act.sa_flags = 0;
sigaction (SIGUSR1, &act, NULL);
sigfillset (&sigset);
sigdelset (&sigset, SIGUSR1);
sigdelset (&sigset, SIGCHLD);
if (sigprocmask (SIG_BLOCK, &sigset, NULL) 0)
{
printf ("sigprocmask error");
exit (-1);
}
childpid = fork();
if ( -1 == childpid )
{
printf( "fork()" );
return -1;
}
else if ( 0 == childpid )
{
kill(getppid(),SIGUSR1);
printf("child pid = %d child ppid = %d \n", getpid(),getppid());
sleep(1);
return 0;
}
else
{
kill(childpid,SIGUSR1);
printf( "parent pid = %d\n ppid = %d", getpid(),getppid() );
sleep(1);
}
return 0;
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/53810/showart_2030658.html |
|