我怎样才能只获得给定进程的祖先进程?

Tim*_*Tim 0 process pstree

是否正确

  • pstree <pid> 将输出给定进程的所有后代进程

  • pstree -s <pid> 将输出给定进程的所有后代进程和祖先进程

我怎样才能只获得给定进程的祖先进程?

谢谢。

Sté*_*las 5

您始终可以使用ps -o ppid=以下方法手动遍历祖先树:

#! /bin/bash -
pid=${1?Please give a pid}
while
  [ "$pid" -gt 0 ] &&
    read -r ppid name < <(ps -o ppid= -o comm= -p "$pid")
do
  printf '%s\n' "$pid $name"
  pid=$ppid
done
Run Code Online (Sandbox Code Playgroud)

或者避免ps多次运行:

#! /bin/sh -
pid=${1?Please give a pid}
ps -Ao pid= -o ppid= -o comm= |
  awk -v p="$pid" '
    {
      pid = $1; ppid[pid] = $2
      sub(/([[:space:]]*[[:digit:]]+){2}[[:space:]]*/, "")
      name[pid] = $0
    }
    END {
      while (p) {
        print p, name[p]
        p = ppid[p]
      }
    }'
Run Code Online (Sandbox Code Playgroud)