Chinaunix首页 | 论坛 | 博客
  • 博客访问: 267701
  • 博文数量: 51
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 606
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-13 16:43
文章分类

全部博文(51)

文章存档

2011年(1)

2010年(3)

2009年(45)

2008年(2)

我的朋友

分类: LINUX

2009-08-18 12:55:10

#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;
}

阅读(1386) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~