2010-06-08 09:42:29 +0000 2010-06-08 09:42:29 +0000
94
94

如何从命令行获取GNU/Linux中的父进程的PID?

解决了之前的问题: cat /proc/1111/status | grep PPid

答案 (10)

112
112
112
2010-06-08 11:21:06 +0000

命令行:

ps -o ppid= -p 1111
ppid () { ps -p ${1:-$$} -o ppid=; }

功能:

alias ppid='ps -o ppid= -p'

别名(函数为优选):

#!/bin/sh
pid=$1
if [-z $pid]
then
    read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=

脚本:

&001

如果没有提供PID给函数或脚本,则默认显示当前进程的PPID。

15
15
15
2013-01-31 20:32:13 +0000

这是我学过的东西之一,忘了,再学,再学,再重复。但它很有用。pstree命令的’s'标志显示了一棵树的叶子在N处:

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
13
13
13
2012-09-24 11:55:28 +0000

父pid在shell变量PPID中,所以

echo $PPID
12
12
12
2016-02-19 21:31:34 +0000

要打印所有进程的父级ID (PPID),请使用此命令:

ps j

对于单个进程,只需传递PID,如:ps j 1234

6
6
6
2010-06-08 09:44:05 +0000

读取/proc/$PID/status。可以很容易编写脚本:

#!/bin/sh P=$1 if [-z "$P"]; then read P fi cat /proc/"$P"/status | grep PPid: | grep -o "[0-9]\*"
4
4
4
2014-10-21 17:30:05 +0000

在Linux上:

ps hoppid $thatprocess
2
2
2
2014-10-19 20:08:11 +0000
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

一个稍微复杂一点的例子,检查启动当前进程的父进程的命令。

1
1
1
2012-11-23 12:21:12 +0000

top运行时,按f键,会在-u username and -p PID的输出中显示一个你想显示的选项列表,显示的参数用大写字母显示,不显示的参数用小写字母显示。对于父进程ID,你需要输入b,然后按回车键,就会在顶部输出中显示PPID。

1
1
1
2013-09-12 06:18:04 +0000

这里有一个快速的解决方案,应该也可以使用:

ps $$
0
0
0
2019-10-30 21:51:11 +0000

当我想找到 “一个pid的所有父进程 "时,我来到了这里。我最后做了一个自己的递归函数来做。

pid_lineage.sh

#!/bin/bash -eu

main(){
  ps -p ${1:-$$} -h -o pid,ppid,args | \
    (
      read pid ppid args
      echo -e "$pid\t$args"
      [[$pid -gt 1]] && main $ppid
    )
}

main "$@"