杀死与另一个进程具有相同GID的进程

时间:2015-07-03 05:51:05

标签: c++ unix process

想要杀死树的进程。  例如:A-> B-> C-> D-> E 我想杀死进程C,D,E但不是A和B。

假设所有进程的父ID是1234。

ps x -o  "%p %r %y %x %c 
{PID_A} 1234
{PID_B} 1234
{PID_C} 1234
{PID_D} 1234
{PID_E} 1234

我杀死A和B也不能杀死-9 -1234。

1 个答案:

答案 0 :(得分:0)

kill -9kill -1(又名kill -15kill -HUP)之类的投票机制失败后,您不应该kill -TERM作为最后的手段

你的问题从A->B->C->D->E开始,这表明A启动B,B启动C,C启动D,D启动E.但是,你说1234是所有B的父PID, C,D,E,也可能是A(假设A不是PID = 1234)。因此,在第二种情况下,您有6个进程:1234和A到E,每个进程都是由1234启动的。

在某些方面,它并不重要。杀死进程C,D,E而不杀死A和B(以及1234)的唯一方法是列出C,D,E的进程ID。除非已采取措施将三个进程放入同一进程组或会话彼此相关,并且在A,B(和1234)的单独流程组或会话中,没有任何替代方案。

您可以查看kill()系统调用的规范:

  

如果 pid 大于0, sig 将被发送到进程ID等于 pid 的进程。

     

如果 pid 为0,则 sig 应发送到进程组ID等于进程组ID的所有进程(不包括未指定的系统进程集)发件人,并且该进程有权发送信号。

     

如果 pid 为-1,则 sig 将被发送到进程有权发送该信号的所有进程(不包括未指定的系统进程集)。

     

如果 pid 为负数,但不为-1,则应将 sig 发送给进程组ID等于的所有进程(不包括未指定的系统进程集) pid 的绝对值,并且该进程有权发送信号。

这些是可用的信号选项。这些选项都不适用于流程1234和A ... E的组织(杀死C,D,E并且留下1234,A,B不熟练)。