C 子进程在接收到信号后仍不运行
该代码是问题的答案之一 似乎孩子在收到信号后没有跑步。按Ctrl+c组合键:C 子进程在接收到信号后仍不运行,c,linux,signals,C,Linux,Signals,该代码是问题的答案之一 似乎孩子在收到信号后没有跑步。按Ctrl+c组合键: Parent Caught ^CCaught Caught Child 有人能解释一下这里发生了什么吗?pause()在孩子接收并处理信号后被调用。不幸的是: 您为孩子做父母的时间 ---- --- ------ ----- 0信号(SIGINT,处理程序) 1 fork()(您好) 2打印(“家长”)(唤醒) 3击杀(…,信号)#比赛击杀v暂停 4处理程序:打印(“捕获”) 5暂
Parent
Caught
^CCaught
Caught
Child
有人能解释一下这里发生了什么吗?pause()在孩子接收并处理信号后被调用。不幸的是:
您为孩子做父母的时间
---- --- ------ -----
0信号(SIGINT,处理程序)
1 fork()(您好)
2打印(“家长”)(唤醒)
3击杀(…,信号)#比赛击杀v暂停
4处理程序:打印(“捕获”)
5暂停
6^C
7处理程序:打印(“捕获”)处理程序:打印(“捕获”)
8退出暂停()
9(仍在运行)
要检查到底发生了什么,请尝试将%i,getpid()添加到printfs中,并且在子分支中的pause()调用之前再添加一个printf()
明确的信号掩蔽可能是一个更好的选择
Parent
Caught
Parent
Caught
^CCaught
Caught
Child
time you parent child
---- --- ------ -----
0 signal(SIGINT,handler)
1 fork() (hello)
2 print("Parent") (waking up)
3 kill(..., SIGINT) <<SIGINT>> # RACE kill v pause
4 handler: print("Caught")
5 pause() pause()
6 ^C <<SIGINT>> <<SIGINT>>
7 handler: print("Caught") handler: print("Caught")
8 exit pause()
9 (still running)