linux 进程崩溃 wait,Linux信号机制有关问题
代碼如下:
#include
#include
#include
void?waiting(),stop();
int?wait_mark;
main()
{
int?p1,p2,stdout;
while((p1=fork())==-1);???????/*創建子進程p1*/
if?(p1>0){
wait_mark=1;
signal(SIGINT,stop);???/*接收到^c信號,轉stop*/
waiting();
kill(p1,16);????????/*向p1發軟中斷信號16*/
wait(0);??????????/*同步*/
printf("Parent?process?is?killed!n");
exit(0);
}
else
{
wait_mark=1;
signal(16,stop);????????/*接收到軟中斷信號16,轉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;
}
預期結果為:系統調用signal(?)讓父進程捕捉鍵盤上來的中斷信號(即按^c鍵);捕捉到中斷信號后,父進程用系統調用kill(?)向兩個子進程發出信號,子進程捕捉到信號后分別輸出下列信息后終止:
Child?process1?is?killed?by?parent!
父進程等待兩個子進程終止后,輸出如下的信息后終止:
Parent?process?is?killed!
但執行結果為:按^c鍵后,只輸出了Parent?process?is?killed!而沒有子進程那句...請問是為什么呢?
|
你在子進程中加上signal(SIGINT,?SIG_IGN);就可以了。
當你按Ctrl+C時子進程也收到了^C信號,子進程按照默認處理退出,收不到16信號了。所以也就打印不出來
|
頂下1樓的
總結
以上是生活随笔為你收集整理的linux 进程崩溃 wait,Linux信号机制有关问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 乘除法优先级,运算符运算符优先级
- 下一篇: 2使用教学_建水三中智能交互式液晶一体机