linux 进程崩溃 wait,Linux信号机制有关问题
代碼如下:
#include
#include
#include
void?waiting(),stop();
int?wait_mark;
main()
{
int?p1,p2,stdout;
while((p1=fork())==-1);???????/*創(chuàng)建子進(jìn)程p1*/
if?(p1>0){
wait_mark=1;
signal(SIGINT,stop);???/*接收到^c信號(hào),轉(zhuǎn)stop*/
waiting();
kill(p1,16);????????/*向p1發(fā)軟中斷信號(hào)16*/
wait(0);??????????/*同步*/
printf("Parent?process?is?killed!n");
exit(0);
}
else
{
wait_mark=1;
signal(16,stop);????????/*接收到軟中斷信號(hào)16,轉(zhuǎn)stop*/
waiting();
lockf(stdout,1,0);
printf("Child?process?1?is?killed?by?parent!n");
lockf(stdout,0,0);
exit(0);
}
}
void?waiting()
{
while(wait_mark!=0);
}
void?stop()
{
wait_mark=0;
}
預(yù)期結(jié)果為:系統(tǒng)調(diào)用signal(?)讓父進(jìn)程捕捉鍵盤(pán)上來(lái)的中斷信號(hào)(即按^c鍵);捕捉到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用kill(?)向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕捉到信號(hào)后分別輸出下列信息后終止:
Child?process1?is?killed?by?parent!
父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出如下的信息后終止:
Parent?process?is?killed!
但執(zhí)行結(jié)果為:按^c鍵后,只輸出了Parent?process?is?killed!而沒(méi)有子進(jìn)程那句...請(qǐng)問(wèn)是為什么呢?
|
你在子進(jìn)程中加上signal(SIGINT,?SIG_IGN);就可以了。
當(dāng)你按Ctrl+C時(shí)子進(jìn)程也收到了^C信號(hào),子進(jìn)程按照默認(rèn)處理退出,收不到16信號(hào)了。所以也就打印不出來(lái)
|
頂下1樓的
總結(jié)
以上是生活随笔為你收集整理的linux 进程崩溃 wait,Linux信号机制有关问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言 乘除法优先级,运算符运算符优先级
- 下一篇: linux系统时间代表,Linux上有两