Den*_*son 126

命令行:

ps -o ppid= -p 1111
Run Code Online (Sandbox Code Playgroud)

功能:

ppid () { ps -p ${1:-$$} -o ppid=; }
Run Code Online (Sandbox Code Playgroud)

别名(最好使用函数):

alias ppid='ps -o ppid= -p'
Run Code Online (Sandbox Code Playgroud)

脚本:

#!/bin/sh
pid=$1
if [ -z $pid ]
then
    read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=
Run Code Online (Sandbox Code Playgroud)

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

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

  • @jtbandes:此处使用的等号抑制标题行 ([Linux](http://linux.die.net/man/1/ps) 和 [OS X](https://developer.apple) 的输出.com/library/mac/#documentation/darwin/reference/manpages/man1/ps.1.html))。 (6认同)

ken*_*orb 19

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

ps j
Run Code Online (Sandbox Code Playgroud)

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

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

ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps
Run Code Online (Sandbox Code Playgroud)

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

$ pstree -sg 1234
systemd(1)???sshd(1036)???bash(2383)???pstree(3007)
Run Code Online (Sandbox Code Playgroud)

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


小智 15

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

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
Run Code Online (Sandbox Code Playgroud)


小智 13

父 pid 在 shell 变量 PPID 中,所以

echo $PPID
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是 1. 我想要其他进程的父进程 pid, 2. 我希望能够遍历所有祖先来初始化。 (2认同)
  • 另一方面,使用 `$PPID` 确实解决了我遇到的问题,谷歌建议将此页面作为答案。 (2认同)

Vi.*_*Vi. 8

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

#!/bin/sh
P=$1
如果 [ -z "$P" ]; 然后
    读P
菲
cat /proc/"$P"/status | grep PPid: | grep -o "[0-9]*"

  • `grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'` 就是你所需要的。(对于 Unix 工具来说,执行 `if [ -z ]; then read` 是非常罕见的。) (3认同)
  • UUOC 无用的使用 cat (2认同)
  • `grep /some/file` 怎么样 (2认同)

小智 5

在 Linux 上:

ps hoppid $thatprocess
Run Code Online (Sandbox Code Playgroud)