Mohammad Reza Rezwani Asked: 2014-08-19 03:00:59 +0800 CST2014-08-19 03:00:59 +0800 CST 2014-08-19 03:00:59 +0800 CST 查找进程的子进程 772 有什么办法可以知道,谁是特定过程的孩子?例如那些父母 ID 是 foo 的孩子? process 5 个回答 Voted Best Answer muru 2014-08-19T03:06:11+08:002014-08-19T03:06:11+08:00 您正在寻找pstree命令。 pstreeby itself 将以树形式列出所有进程(就像lsblk那样)。您也可以使用该-p标志来获取列出的 PID,以及-s显示父进程: $ pstree -p 602 udisksd(602)-+-{cleanup}(607) |-{gdbus}(605) |-{gmain}(603) `-{probing-thread}(606) 一种(可能)符合 POSIX 的获取子 PID 的方式(我在其他地方的评论中提到过): ps -o ppid= -o pid= -A | awk '$1 == <some pid>{print $2}' 这告诉ps写入所有进程的父 PID 和 PID(不带标题),然后使用awk查看第一个字段(父 PID)中哪些行具有给定的 PID,并打印相应的第二个字段(子 PID)。 steeldriver 2014-08-19T04:57:53+08:002014-08-19T04:57:53+08:00 如果您只想查看其 PID 为的进程的直接子进程,123您可以使用该ps命令的--ppid选项: ps --ppid 123 您可以将其与pidof命令结合使用,以按名称获取进程的子进程,即给定一个名为foo ps --ppid $(pidof foo) v2r 2014-08-19T08:25:18+08:002014-08-19T08:25:18+08:00 另一种选择是使用系统监视器(预装)。在 SM 菜单栏中,在“查看”下标记“依赖项”选项以获得视觉反馈,显示父进程和子进程,如下面的屏幕截图所示。 我自己更喜欢 CL(命令行),并建议那些每天使用 Linux(在本例中为 Ubuntu)的人明智地花时间学习基本命令,而不是 GUI 应用程序,或者至少能够掌握两者一定程度! andybuckley 2014-08-24T11:15:15+08:002014-08-24T11:15:15+08:00 我不是专家,但阅读上面的答案后,我觉得可能有更直接的方法通过 proc 文件系统来执行此操作,例如在脚本中以编程方式使用而不是人类可读的显示。确实存在:ID code为$mypid的进程,其子进程列在 /proc/$mypid/task/$mypid/children 例如 $ cat /proc/3123/task/3123/children 3131 3133 同样,您可以通过文件中的“PPid”条目获取父进程ID /proc/$mypid/task/$mypid/status 例如 $ grep PPid /proc/3131/task/3131/status PPid: 3123 $ grep PPid /proc/3131/task/3131/status | cut -f2 3123 不过,我不确定这在 Linux 系统之外的可移植性如何。 y_159 2020-08-16T19:48:20+08:002020-08-16T19:48:20+08:00 如果您只想查看给定父进程<pid>ID 的第一级子进程,请查看/proc/<pid>/task/<tid>/children条目。 请注意,此文件包含第一级子进程的 pids。对于整个流程树,递归执行。 这个https://lwn.net/Articles/475688/包含更多关于它的信息。
您正在寻找
pstree
命令。pstree
by itself 将以树形式列出所有进程(就像lsblk
那样)。您也可以使用该-p
标志来获取列出的 PID,以及-s
显示父进程:一种(可能)符合 POSIX 的获取子 PID 的方式(我在其他地方的评论中提到过):
这告诉
ps
写入所有进程的父 PID 和 PID(不带标题),然后使用awk
查看第一个字段(父 PID)中哪些行具有给定的 PID,并打印相应的第二个字段(子 PID)。如果您只想查看其 PID 为的进程的直接子进程,
123
您可以使用该ps
命令的--ppid
选项:您可以将其与
pidof
命令结合使用,以按名称获取进程的子进程,即给定一个名为foo
另一种选择是使用系统监视器(预装)。在 SM 菜单栏中,在“查看”下标记“依赖项”选项以获得视觉反馈,显示父进程和子进程,如下面的屏幕截图所示。
我自己更喜欢 CL(命令行),并建议那些每天使用 Linux(在本例中为 Ubuntu)的人明智地花时间学习基本命令,而不是 GUI 应用程序,或者至少能够掌握两者一定程度!
我不是专家,但阅读上面的答案后,我觉得可能有更直接的方法通过 proc 文件系统来执行此操作,例如在脚本中以编程方式使用而不是人类可读的显示。确实存在:ID code为$mypid的进程,其子进程列在
例如
同样,您可以通过文件中的“PPid”条目获取父进程ID
/proc/$mypid/task/$mypid/status
例如
不过,我不确定这在 Linux 系统之外的可移植性如何。
如果您只想查看给定父进程
<pid>
ID 的第一级子进程,请查看/proc/<pid>/task/<tid>/children
条目。请注意,此文件包含第一级子进程的 pids。对于整个流程树,递归执行。
这个https://lwn.net/Articles/475688/包含更多关于它的信息。