你如何杀死Linux中的进程树?

its*_*dok 19 linux kill process

有时,向进程发送 SIGTERM 会导致它向其所有子进程发送 SIGTERM。但是,有时这不起作用。

是否有命令或实用程序可以让我同时杀死一个进程及其所有子进程?我通常会手动将所有 pid 收集到一个 kill 命令中,但这感觉很愚蠢。

这个 SO 问题询问如何用 perl 做到这一点,但任何能完成工作的东西都会很棒。

goo*_*goo 14

这个SO 问题涵盖了这一点。


Jam*_*s F 14

假设进程共享一个会话标识符(除非他们明确调用了setsid(),否则他们应该共享一个会话标识符,您可以使用pkill通过会话杀死它们:

user@machine:~> ps -o pid,sess,cmd -U user
  PID  SESS CMD
12804 12804 -bash
12916 12804 ps -o pid,sess,cmd -U user
user@machine:~> sh
sh-3.00$ sh
sh-3.00$ sh
sh-3.00$ sh
sh-3.00$ sh
sh-3.00$ sh
sh-3.00$ ps -o pid,sess,cmd -U user
  PID  SESS CMD
12804 12804 -bash
12920 12804 sh
12921 12804 sh
12922 12804 sh
12924 12804 sh
12926 12804 sh
12928 12804 sh
12937 12804 ps -o pid,sess,cmd -U user
sh-3.00$
Run Code Online (Sandbox Code Playgroud)

如果从另一个终端我做:

pkill -9 -s 12804
Run Code Online (Sandbox Code Playgroud)

然后一切都一举消亡。

您可以类似地按进程组杀死,尽管这对于许多都比父进程低一级的子进程更有用,而不是关联进程链。