Linux如何查看或杀死指定进程的所有子进程(包括递归子进程)?

有时候,需要查看指定进程的所有子进程,ps命令在这个时候并不好使,尤其是当出现递归子进程的情况下,ps命令并不一定能查找得到——比如使用pipexec命令开启并行多进程的情况下。另外在杀死子进程方面,pkill命令也对递归子进程无能为力。

这个时候,需要pstree命令帮忙了。

使用pstree查看指定进程的所有子进程命令如下:

pstree -ap <待查看的进程>

此时它会输出所有相关子进程,包括递归子进程。

[test@local ~]# pstree -ap 2252
pipexec,2252 <命令行参数>
  ├─bash,9012 <命令行参数>
  │   └─su,38171 <命令行参数>
  │       └─bash,38173 <命令行参数>
  │           └─java,38175 <命令行参数>
  ├─bash,9013 <命令行参数>
  │   └─su,28185 <命令行参数>
  │       └─bash,28187 <命令行参数>
  │           └─java,28189 <命令行参数>
  ├─bash,9014 <命令行参数>
  │   └─su,28177 <命令行参数>
  │       └─bash,28179 <命令行参数>
  │           └─java,28181 <命令行参数>
  ├─bash,9015 <命令行参数>
  │   └─su,28184  <命令行参数>
  │       └─bash,28186 <命令行参数>
  │           └─java,28188 <命令行参数>
  └─bash,9016 <命令行参数>
      └─su,28176 <命令行参数>
          └─bash,28178 <命令行参数>
              └─java,28180 <命令行参数>

如果需要杀死指定进程下包括包括递归子进程的所有子进程,那么也要配合pstree的输出来进行。命令格式:

pstree  <待杀死的进程> -p -a -l | cut -d, -f2 | cut -d' ' -f1 | xargs kill

太温柔?直接暴力上kill -9咯:

pstree  <待强制杀死的进程> -p -a -l | cut -d, -f2 | cut -d' ' -f1 | xargs kill -9

本页永久链接:https://www.orztip.com/?p=542&article_title=pstree-show-or-kill-process-dependency