Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 子进程在接收到信号后仍不运行_C_Linux_Signals - Fatal编程技术网

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暂

该代码是问题的答案之一

似乎孩子在收到信号后没有跑步。按Ctrl+c组合键:

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)