我希望通过向进程组内的进程发送SIGTERM
信号来终止该进程组。这可以通过kill
命令完成,但我找到的手册提供的细节很少,不清楚具体的工作原理:
int kill(pid_t pid, int sig);
...
If pid is less than -1, then sig is sent to every process in
the process group whose ID is -pid.
然而,信号将按照什么顺序发送到组成员进程中?想象一下以下情况:在主进程和组内从属进程之间设置了一个管道。如果在处理过程中杀死从属进程
kill(-pid)
,而主进程还没有被杀死,主进程可能会报告这是一种内部故障(收到子进程死亡的通知)。然而,我希望所有进程都能理解这样的终止是由于他们的进程组外部原因造成的。
我该如何避免这种混乱?我应该做些比单纯的kill(-pid,SIGTERM)
更多的事情吗?或者这是由操作系统的底层属性解决的,而我不知道吗?
请注意,我不能修改组内进程的代码!
SIGTERM
处理程序确实不会被调用,直到进程由于SIGCONT
唤醒。我的实验还表明,所有正确的SIGCHLD
信号都会传递给控制进程:在子进程停止、恢复和终止时,我们发送信号。 - P Shvedps
输出或/proc/<pid>/stat
来检查进程状态,其中在ps
输出中使用T
表示停止状态(根据 man 手册)。 - mvds