寻找过程的孩子


Answers:


26

您正在寻找pstree命令。 pstree本身将以树形形式列出所有进程(就像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)。


10

如果只想查看其PID为的进程的直接子级,则123可以使用ps命令的--ppid选项:

ps --ppid 123

您可以将其与pidof命令结合使用,以按名称获取进程的子级,即给定一个名为foo

ps --ppid $(pidof foo)

10

另一个选择是使用系统监视器(预装)。在SM菜单栏中,在“视图”下标记“依赖项”选项,以进行视觉反馈,显示父进程和子进程,如下面的屏幕快照所示。

我本人更喜欢CL(命令行),并建议那些使用Linux(在本例中为Ubuntu)的用户明智地投入时间在学习基本命令上,而不是在GUI应用程序上,或者至少能够精通两者。一定程度!

在此处输入图片说明 在此处输入图片说明


1
OT:那是什么主题?
muru

1
我使用Ubuntu + GnomeShell 3.2.1,该主题称为“ AdwaitaDark”,它是一个GTK3主题,但它是自定义的并且不可用,就像您在屏幕快照中看到的那样。
v2r

6

我不是专家,但是在阅读以上答案后,我觉得可能是通过proc文件系统执行此操作的更直接方法,例如,以脚本方式而不是人类可读的显示方式进行编程。确实存在:对于ID为$ 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系统之外是否具有可移植性。


1
如果要考虑可移植性:ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2应符合POSIX。
muru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.