进程软中断通信中,signal()函数到底该放在哪一个进程中

SIKK 2019-05-27 05:42:47
需要用signal()函数捕捉中断信号,然后父进程调用kill,向两个子进程,使其输出信息后终止.
我将signal()函数位置改变,一个在进程创建前,一个在父进程创建后,都是希望通过中断信号实现父进程和子进程的通信.
但是却出现了不同的输出信息,一个有子进程输出,一个没有子进程输出,想请问造成这样的原因是什么?

这个代码 直接在进程创建前就设置signal()函数,捕捉中断信号.可以成功让两个子进程输出信息.

pid_t pid1,pid2;
signal(2,stop);
pid1=fork();


我做了少许调整.将signal()放到了调用的父进程中,结果输入中断信号,但是子进程并没有输出信息.

pid_t pid1,pid2;
pid1=fork();


if(pid1>0){
pid2=fork();
if(pid2>0){
signal(2,stop);
printf("在父进程中\n");
sleep(10);
kill(pid1,16);
wait(0);
kill(pid2,17);
wait(0);
printf("\nParent process is killed!\n");
sleep(100);
exit(0);


以下是成功输出子进程信息的完整代码.

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<sched.h>
#include <signal.h>
#include <sys/wait.h>
#include <stdlib.h>
int wait_flag=1;
void stop(){

}
void stop2(){
wait_flag = 0;
}
int main(){

pid_t pid1,pid2;
signal(2,stop);
pid1=fork();


if(pid1>0){
pid2=fork();
if(pid2>0){
printf("在父进程中\n");
sleep(10);
kill(pid1,16);
wait(0);
kill(pid2,17);
wait(0);
printf("\nParent process is killed!\n");
exit(0);
}else{
signal(17,stop2);
while(wait_flag)
;
printf("在第二个子进程中:");
printf("Child Processl2 is killed by parent!\n");
exit(0);
}
}else if(pid1==0){
signal(16,stop2);
while(wait_flag)
;
printf("在第一个子进程中:");
printf("Child Processl1 is killed by parent!\n");
exit(0);
}


}
...全文
167 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
FLYUP_CHEN 2019-06-25
  • 打赏
  • 举报
回复
你fork的时候子进程就已经创建了,所以你设置的信号量也是给子进程设置的。

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧