如何仅获取给定进程的祖先进程?

如何仅获取给定进程的祖先进程?

这是正确的吗

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

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

如何仅获取给定进程的祖先进程?

谢谢。

答案1

您始终可以使用以下命令手动遍历祖先树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

或者避免运行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]
      }
    }'

答案2

你可以尝试以下,我发现它在Linux 手册页: -h 这突出显示当前进程及其祖先。 -n 这将按 PID 而不是按名称对具有相同祖先的进程进行排序。

相关内容