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


80

之前已经解决了: cat /proc/1111/status | grep PPid


快点: grep PPid status |cut -f2time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done);想知道是否有更快的东西?
Aquarius Power

1
@AquariusPower因为你问,fgrep比grep更快。 fgrep PPid status |cut -f2
jbo5112

sed比grep和cut更快: sed -rn '/PPid/ s/^.*:\s+// p' < status
Marian

Answers:


93

命令行:

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=

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

要使用别名,必须提供PID。


= 标志是没有必要的,至少在OS X 10.8.2上。
jtbandes

5
@jtbandes:这里使用的等号会抑制标题行的输出( Linux的 OS X. )。
Dennis Williamson

11

这是我学习,忘记,重新学习,重复的一件事。但它很有用。 pstree命令的's'标志显示一棵树在N处有一个叶子:

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks

11

父pid是shell变量PPID,所以

echo $PPID

1
是的,但是1.我想要其他进程的父pid,2。我希望能够遍历所有祖先到init。
Vi.

1
另一方面,使用 $PPID 我刚刚解决了谷歌建议这个页面作为答案的问题。
Paul Whittaker

7

这个命令:

ps j

将打印父ID( PPID )所有过程。

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

要仅提取值,请过滤输出 awk, 喜欢:

ps j 1234 | awk 'NR>1 {print $3}' # BSD ps
ps j 1234 | awk 'NR>1 {print $1}' # GNU ps

要列出所有父项的PID,请使用 pstree, 喜欢:

$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)

要获取当前进程的父PID,请使用 echo $$


1
pstree 是我见过的最好的一个。
sudo

5

读/ proc / $ PID /状态。可以轻松编写脚本:

#!/bin/sh
P=$1
if [ -z "$P" ]; then
    read P
fi
cat /proc/"$P"/status | grep PPid: | grep -o "[0-9]*"

1
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*' 是你所需要的全部。 (它是 非常罕见 对于Unix工具来说 if [ -z ]; then read 事情。)
grawity

@grawity它有助于做类似的事情 echo $$ | ppid | ppid | ppid
Vi.

2
UUOC无用地使用猫
Felipe Alvarez

@FelipeAlvarez,我的手不习惯打字 < /some/file grep | grep | ...
Vi.

2
关于什么 grep /some/file
Felipe Alvarez


2
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

一个更复杂的示例,它检查启动当前进程的父命令 将comm =更改为cmd =以查看完整命令


无用的使用 回声 ? ;)
bobbogo

某些终端实际上​​需要它。说实话,我不记得确切,但实际上解决了一个问题。 :d
sebastian_t


1

top 你想要的任何选择,比如 -u username and -p PID

而且 top 工作出版社 F ,它显示了您要显示的选项列表 top 输出,显示的参数将以大写字母显示,显示或不显示的参数将以小写字母显示。

因此,通过在参数前输入字母,您可以启用或禁用它。对于父进程ID,您必须输入 b 然后按 输入 ,它会在顶部输出中显示PPID。


1
它是非交互式使用的。我已经知道了 htop 你可以配置 PPID 柱。
Vi.
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.