Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.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_Unix_Process - Fatal编程技术网

C 杀死进程组

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(因此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在一个单独的流程组中,您如何为它们设置流程组?从表面上看,系统不同意您的观点,认为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)?