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

Kill a process which has same GID for another process

本文关键字:进程 GID 另一个      更新时间:2023-10-16

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

假设所有进程的Parent 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

我不能杀死-9-1234,因为它也杀死了A和B。

除非在kill -1kill -15(也称为kill -HUPkill -TERM(等政治机制失败后作为最后手段,否则不应该执行kill -9

你的问题从A->B->C->D->E开始,这表明A启动B,B启动C,C启动D,D启动E。然而,你说1234是所有B、C、D、E的父PID,可能还有A(假设A不是PID=1234(。因此,在第二个场景中,您有6个进程:1234和A到E,每个进程都是由1234启动的。

从某些方面来说,这并不重要。在不杀死A和B(和1234(的情况下杀死进程C、D、E的唯一方法是列出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未填充(。