首页 > 编程知识 正文

用signal函数捕捉信号输出,信号量signal操作

时间:2023-05-04 08:52:59 阅读:180947 作者:3488

用系统调用函数fork ()创建两个子进程,用系统调用函数signal )使父进程捕获信号SIGINT (用kill命令触发),捕获中断信号后,父进程由系统

Child process 1 is killed by parent!

Child process 2 is killed by parent!

父进程等待两个子进程结束,然后输出以下信息退出:

部件进程退出!

分析过程:

父进程:创建两个子进程,调用signal函数捕获SIGINT信号func (),然后在func函数中使用kill将信号SIGHUP发送到子进程。 以及wait (空) )。

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

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

# include stdio.h # includesys/wait.h # includesys/types.h # includesignal.h # include stdlib.h # include unistd.h 基尔(PID,SIGHUP ); kill(PID1,SIGHUP ); }voidchild1(intarg ) printf (child1processwaskilledbyfatherprocessn ); 退出(0; }voidchild2(intarg )打印(child2processwaskilledbyfatherprocessn ); 退出(0; }注册}int main (()//1,捕获信号sigintsignal ) sigint,fatherfun ); pid=fork (; if(PID0) Perror('forkfailed(n ) ); 返回- 1; (if ) PID0) printf(testfatherPID=%dn ),getpid ); pid1=fork (; if(PID10 ) Perror('forkfailed(n ) ); 返回- 1; //父进程等待接收捕获信号if (pi D10 ) (等待)空); ait (空); 打印(fatherprocessexit ); 退出(0; //子进程2等待接收来自父进程的信号if (PID1==0) { pid1=getpid; signal(sighup,child2; wile(1; }//子进程1等待接收来自父进程的信号if (PID==0) { pid=getpid; signal(sighup,child1); wile(1; }return 0; () ) ) ) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。