pstree -p 是最准最快定位父子进程关系的方式,它用缩进和连接符直观展示派生链(如sshd(790)───bash(1245)───curl(1267)),括号内数字即pid,可直接用于kill或strace。

直接用 pstree -p 就行,这是最准、最快的方式。其他方法(比如 ps -ef 手动比对 PPID)容易跳层、漏看,尤其在多级 fork 或服务封装场景下不可靠。
为什么 pstree -p 是默认起点,而不是 ps 或 top
ps 和 top 输出是扁平列表,父子关系藏在 PPID 字段里,得手动比对、容易跳层漏看;pstree 天然用缩进 + 连接符表达派生链,比如 sshd(790)───bash(1245)───curl(1267),一眼就明白 curl 是 bash 启动的,bash 又挂在 sshd 下。
- 缩进越深,层级越低,父进程一定在上一级缩进位置
- 同名进程被自动合并为
5*[nginx],不代表 5 个独立进程,可能是多线程或重复 fork - 带花括号的条目如
{gdbus}是线程,不是子进程,除非加-t显式开启线程显示
pstree -p 显示的 PID 怎么对应到真实进程操作
括号里的数字就是 PID,可直接用于 kill、strace -p、/proc/PID/ 查看。但要注意几个常见偏差:
- 会把它挂在下,而非原始启动脚本下
- 如果只运行
pstree -p(不加sudo),默认只显示当前用户进程,root启动的服务及其 worker 进程会被过滤掉 - 刚
fork还没exec的进程不会出现在pstree中,但ps -eo pid,ppid,comm,state还能查到
怎么快速聚焦某个服务或 PID 的父子链
不要从全系统树里肉眼扫,直接指定目标缩小范围:
- 查
nginx所有进程及子树:pstree -p nginx(注意大小写,匹配的是comm字段) - 查 PID 为 1234 的进程及其所有后代:
pstree -p 1234 - 反向追溯——已知子进程 PID,想看它怎么来的:
pstree -s 1234,输出形如systemd(1)───sshd(790)───bash(1234)
真正容易被忽略的是:pstree 默认不显示跨用户、跨 namespace、已僵死或刚 fork 还没 exec 的进程;一旦怀疑链路断了,别只盯着树,立刻切到 ps -eo pid,ppid,comm,state 看原始字段。











