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

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

询问前已解决:cat /proc/1111/status | grep PPid

答案1

命令行:

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。

答案2

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

ps j

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

要仅提取值,请按 过滤输出awk,例如:

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

要列出所有父级的 PID,请使用pstree(如果没有,请安装):

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

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

答案3

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

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

答案4

读取 /proc/$PID/status。可以轻松编写脚本:

/bin/sh #!/bin/sh 复制代码
价格=1美元
如果 [ -z "$P" ]; 那么
    读 P
猫/proc/“ $ P” /状态|复制代码grep -o “[0-9]*”

相关内容