![查找进程的子进程](https://linux22.com/image/1121975/%E6%9F%A5%E6%89%BE%E8%BF%9B%E7%A8%8B%E7%9A%84%E5%AD%90%E8%BF%9B%E7%A8%8B.png)
有什么方法可以知道谁是特定进程的子进程?例如,父进程 ID 为 foo 的子进程?
答案1
您正在寻找pstree
命令。
pstree
本身将以树形形式列出所有进程(就像lsblk
这样做一样)。 您还可以使用-p
标志来列出 PID,以及-s
显示父进程:
$ pstree -p 602
udisksd(602)-+-{cleanup}(607)
|-{gdbus}(605)
|-{gmain}(603)
`-{probing-thread}(606)
获取子 PID 的 (可能) POSIX 兼容方法(我在其他地方的评论中提到过):
ps -o ppid= -o pid= -A | awk '$1 == <some pid>{print $2}'
这说明ps
写入所有进程的父 PID 和 PID(不带标题),然后使用awk
查看哪些行在第一个字段(父 PID)中具有给定的 PID,并打印相应的第二个字段(子 PID)。
答案2
如果您只想查看 PID 为的进程的直属子进程,123
您可以使用该ps
命令的--ppid
选项:
ps --ppid 123
您可以将其与pidof
命令结合使用,以按名称获取进程的子进程,即给定一个名为的进程foo
ps --ppid $(pidof foo)
答案3
另一种选择是使用系统监视器(已预安装)。在 SM 菜单栏中,标记“查看”下的“依赖项”选项,以获得视觉反馈,显示父进程和子进程,如下面的屏幕截图所示。
我自己更喜欢 CL(命令行),并建议那些每天使用 Linux(在本例中是 Ubuntu)的人明智地花时间学习基本命令,而不是 GUI 应用程序,或者至少能够在一定程度上掌握两者!
答案4
如果您只想查看给定父进程<pid>
ID 的第一级子进程,请查看/proc/<pid>/task/<tid>/children
条目。
注意,此文件包含第一级子进程的 pid。对于整个进程树,以递归方式执行。
这https://lwn.net/Articles/475688/包含更多相关信息。