C 杀死进程组
我有一个进程树作为P1⟶ P2⟶ P3⟶ P4⟶ P5(因此P2是P1的子对象,P3是P2的子对象,依此类推)C 杀死进程组,c,linux,unix,process,C,Linux,Unix,Process,我有一个进程树作为P1⟶ P2⟶ P3⟶ P4⟶ P5(因此P2是P1的子对象,P3是P2的子对象,依此类推) 过程P1和P2属于同一个过程组 过程P3、P4和P5属于其他过程组 在流程P1中,我们知道P3、P4和P5的流程组(它是值P3),我们将SIGKILL发送到此流程组。使用kill(-P3,SIGKILL)。 预期这会杀死P3、P4和P5,但不会杀死P2,但观察到P2 也被杀了。 我这里有两个问题: 为什么P2会被杀 在P1中,P2的退出状态是什么 您如何知道P3、P4和P5在一个单
- 过程P1和P2属于同一个过程组
- 过程P3、P4和P5属于其他过程组
kill(-P3,SIGKILL)
。
预期这会杀死P3、P4和P5,但不会杀死P2,但观察到P2
也被杀了。
我这里有两个问题:
您如何知道P3、P4和P5在一个单独的流程组中,您如何为它们设置流程组?从表面上看,系统不同意您的观点,认为P2与P3等属于同一过程组。A会有所帮助。报告给P1的P2的退出状态为
WIFSIGNALED(status)
true和WTERMSIG(status)=SIGKILL
。您如何知道P1中P3的进程组?您使用的是哪些系统调用setId()
,setpgid()
,setpgrp()
,tcsetpgrp()
,或者其他什么?我正在使用setpgid()设置P3、P4和P5的公共进程组。P3将执行fork()和P4的执行,对P5执行相同的操作,这将使所有P3、P4和P5都进入同一进程组。虽然P3是P2的子级,但在调用setpgid()后,它将移动到不同的进程组中。您需要显示代码。有太多的方法可以让我们猜测你在做什么。是否检查setpgid()
中的返回值?是否使用getpgid()
验证流程组?P1如何了解P3的流程组(甚至PID)?