有什么方法可以知道,谁是特定过程的孩子?例如那些其父ID为foo的孩子?
有什么方法可以知道,谁是特定过程的孩子?例如那些其父ID为foo的孩子?
Answers:
您正在寻找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)。
我不是专家,但是在阅读以上答案后,我觉得可能是通过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系统之外是否具有可移植性。
ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2
应符合POSIX。