这是正确的吗
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 而不是按名称对具有相同祖先的进程进行排序。