900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > linux 两个子进程 父进程创建两个子进程 在收到中断信号后杀死两个子进程

linux 两个子进程 父进程创建两个子进程 在收到中断信号后杀死两个子进程

时间:2024-02-27 20:47:59

相关推荐

linux 两个子进程 父进程创建两个子进程 在收到中断信号后杀死两个子进程

该楼层疑似违规已被系统折叠隐藏此楼查看此楼

用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:

Childprocess1iskilledbyparent!

Childprocess2iskilledbyparent!

父进程等待两个子进程终止后,输出如下的信息后终止:

Parentprocessiskilled!

#include

#include

#include

voidwaiting(),stop();

intwait_mark;

main()

{

intp1,p2,stdout;

while((p1=fork())==-1);/*创建子进程p1*/

if(p1>0)

{

while((p2=fork())==-1);/*创建子进程p2*/

if(p2>0)

{

wait_mark=1;

signal(SIGINT,stop);/*接收到^c信号,转stop*/

waiting();

kill(p1,16);/*向p1发软中断信号16*/

kill(p2,17);/*向p2发软中断信号17*/

wait(0);/*同步*/

wait(0);

printf("Parentprocessiskilled!\n");

exit(0);

}

else

{

wait_mark=1;

signal(17,stop);/*接收到软中断信号17,转stop*/

waiting();

lockf(stdout,1,0);

printf("Childprocess2iskilledbyparent!\n");

lockf(stdout,0,0);

exit(0);

}

}

else

{

wait_mark=1;

signal(16,stop);/*接收到软中断信号16,转stop*/

waiting();

lockf(stdout,1,0);

printf("Childprocess1iskilledbyparent!\n");

lockf(stdout,0,0);

exit(0);

}

}

voidwaiting()

{

while(wait_mark!=0);

}

voidstop()

{

wait_mark=0;

}

、运行结果

屏幕上无反应,按下^C后,显示Parentprocessiskilled!

1.为何预期的结果并未显示出?

2.程序该如何修改才能得到正确结果?

3.不修改程序如何得到期望的输出?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。