找到这个过程的孩子

有什么方法可以知道,谁是特定过程的孩子? 例如那些父母ID是foo的孩子?

您正在寻找pstree命令。 pstree本身将以树forms列出所有进程(如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 == {print $2}' 

这告诉ps写入所有进程的父PID和PID(没有标题),然后使用awk查看哪些行在第一个字段(父PID)中具有给定的PID,并打印相应的第二个字段(子PID) )。

另一个选择是,使用系统监视器 (预安装)。 在SM菜单栏中标记“依赖关系”选项,在“查看”下,要有视觉反馈,在下面的屏幕截图中显示父和子进程。

我自己更喜欢CL(命令行),并建议那些使用Linux的用户,在这种情况下每天使用Ubuntu,明智地花时间学习基本命令,通过GUI应用程序或者至少能够掌握两者一定程度!

在此处输入图像描述在此处输入图像描述

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

 ps --ppid 123 

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

 ps --ppid $(pidof foo) 

我不是专家,但阅读上面的答案,在我看来,通过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系统的可移植性。