将SIGSTOP发送到子进程会停止所有执行。 C

时间:2010-10-03 19:21:19

标签: c unix process parent-child signals

当我从父母那里调用kill(Child_PID, SIGSTOP);时,我希望孩子停止执行并让父母继续。这是预期的行为还是我必须在子代中显式声明SIGSTOP处理程序?我到处搜索,但无法找到这些信息。

感谢。 布雷登

3 个答案:

答案 0 :(得分:2)

POSIX说:

  

系统不允许进程捕获SIGKILL和SIGSTOP信号。

因此,如果信号发送成功,孩子别无选择,只能停止。并且您不能在子(或父或任何其他)进程中设置SIGSTOP处理程序。

答案 1 :(得分:2)

这是预期的行为。引自unix手册页:

  

无法捕获,阻止或忽略信号SIGKILL和SIGSTOP。

BSD手册页提到:

  

signal()函数将失败,不会执行任何操作   如果出现以下情况之一:

[EINVAL]           The sig argument is not a valid signal number.
[EINVAL]           An attempt is made to ignore or supply a handler
                   for SIGKILL or SIGSTOP.

结束语,您不允许为SIGSTOP安装处理程序。并且该流程将保持挂起状态,直到收到SIGCONT

答案 2 :(得分:1)

这是预期的行为。

使用strace your_program查看正在发生的事情。