用signal函数捕捉信号SIGINT

  1. 用系统调用函数fork( )创建两个子进程,再用系统调用函数signal()让父进程捕捉信号SIGINT(用kill命令来触发),当捕捉到中断信号后,父进程用系统调用函数kill()向两个子进程发出信号,子进程捕捉到父进程发来的信号后,分别输出下列信息后终止:

    Child process 1 is killed by parent!
    Child process 2 is killed by parent!

    父进程等待两个子进程终止后,输出以下信息后终止:
    Parent process exit!

分析过程:
父进程: 创建两个子进程,调用signal函数捕捉SIGINT信号–>func(), 在func函数中,使用kill发送信号SIGHUP 给子进程.然后 wait(NULL)

子进程1: 调用signal函数捕捉SIGHUP信号,执行函数func1,输出一句话,然后结束。

子进程2: 调用signal函数捕捉SIGHUP信号,执行函数 func2,输出一句话,然后结束。

#include 
#include 
#include 
#include 
#include 
#include pid_t pid=1,pid1=1;  //测试pid数值传递void fatherfun(int arg)
{//printf("pid1=%d pid2=%d\n",pid,pid1);kill(pid, SIGHUP);kill(pid1, SIGHUP);
}
void child1(int arg)
{printf("child1 process was killed by father process\n");exit(0);
}
void child2(int arg)
{printf("child2 process was killed by father process\n");exit(0);
}int main()
{//1,注册捕捉信号SIGINTsignal(SIGINT, fatherfun);pid = fork();if(pid < 0){perror("fork failed\n");return -1;}	if(pid > 0){printf("test father pid=%d\n",getpid());pid1 = fork();if(pid1 < 0){perror("fork failed\n");return -1;}	//父进程等待接收捕捉信号if(pid1 > 0){wait(NULL);wait(NULL);printf("father process exit");exit(0);}//子进程2等待接收父进程发送的信号if(pid1 == 0){pid1 = getpid();signal(SIGHUP, child2);while(1);}}//子进程1等待接收父进程发送的信号if(pid == 0){pid = getpid();signal(SIGHUP, child1);while(1);}return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部