如何获取给定子进程的父进程ID?
如何从给定的孩子pid获得父pid?
我知道我可以在/ proc下进行mannully检查,我很想知道在Ubuntu中是否有一个聪明/更好的方法来实现它。 请注意,父母可能会或可能不会被杀死。
谢谢
如何使用命令行从子进程ID(PID)获取父PID(PPID)
使用ps -o ppid=
- 例如
ps -o ppid= 2072
返回2061
,你可以在脚本等中轻松使用ps -o ppid= -C foo
用命令foo
给出进程的PPID。 你也可以使用老式的ps | grep
ps | grep
:ps -eo ppid,comm | grep '[f]oo'
ps -eo ppid,comm | grep '[f]oo'
。 - 富勒解释:
ps -f 2072
返回UID PID PPID C STIME TTY STAT TIME CMD izx 2072 2061 0 07:16? S 0:00 / usr / lib / pulseaudio / pulse / gconf-helper
-
pstree
关系是:pstree -s -p 2072
:的init(1)───pulseaudio(2061)───gconf辅助(2072)
仅使用shell变量来获取父PID:
echo $PPID
如果您需要来自此父pid的命令:
cat /proc/$PPID/comm
如果您需要完整的命令行(包含所有选项):
cat /proc/$PPID/cmdline
说明
-
$PPID
由shell定义,它是父进程的PID - 在
/proc/
,你有一些dirs与每个进程的PID。 然后,如果你cat /proc/$PPID/comm
,则回显PID的命令名
检查man proc
使用命令名称的pstree
使用pstree
您可以按子进程名称进行搜索,并获得进程ID(PID)以及父进程,祖父母和子进程的任何子进程:
$ pstree -hp | grep sleep |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)
在这种情况下, sleep
是子命令,它的PID是8414
。 它的父ID是841,称为display-auto-brightness
。 祖父母是一个shell( sh
),进程ID为839
。 曾祖父母是cron
,进程ID为795
。 伟大的曾祖父母也是cron
,进程ID为763
。
如果要按sleep
的进程ID而不是名称进行搜索,可以使用:
$ pstree -hp | grep 14653 |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(14653)
请注意, sleep
进程ID已更改为14653
。 父(PID 841)hibernate1分钟,唤醒一瞬间,然后启动新的sleep
命令,获取新的进程ID。 这是搜索sleep
比按进程ID搜索更容易的另一个原因。
此代码取自: 根据日出和日落自动调整显示亮度并适应此问题。
要查看嵌套链一直返回引导过程,请使用PID而不是名称:
$ pstree -aps 8541 systemd,1 splash fastboot kaslr └─cron,763 -f └─cron,795 -f └─sh,839 -c /usr/local/bin/display-auto-brightness └─display-auto-br,841 /usr/local/bin/display-auto-brightness └─sleep,8541 60
注意:另一分钟已经过去,sleep命令获得一个新的PID(8541)。