pstree 命令以树形图直观展示进程父子关系;默认仅显示当前用户进程,需 sudo 才可见系统服务;支持 -p(pid)、-pu(用户)、-ap(完整命令)等选项精准定位;可聚焦查询特定服务或进程链,但不显示僵尸进程和容器内进程,此时应结合 ps 验证。

直接用 pstree 命令最直观,它把进程的父子继承关系画成树形图,一眼就能看出谁启动了谁、哪些是子进程、哪些已变成孤儿进程。
用 pstree 快速看全系统进程树
默认运行 pstree 只显示当前用户的进程,系统级服务(如 systemd、nginx、redis)不会出现。要看到完整结构,必须加 sudo:
-
sudo pstree -p:显示 PID,方便后续查具体进程 -
sudo pstree -pu:同时显示所属用户,适合排查权限相关问题 -
sudo pstree -ap:显示完整启动命令,能区分同名但参数不同的进程(比如两个 python 进程跑不同服务)
精准定位某个服务或进程的父子链
别在整棵树里手动找,用 pstree 的聚焦功能:
- 查 nginx 所有相关进程:
pstree -p nginx(注意大小写,匹配的是comm字段) - 查 PID 为 1234 的进程及其所有后代:
pstree -p 1234 - 反向追溯父链(已知子进程,想看它怎么来的):
pstree -s 1234,输出类似systemd(1)───sshd(790)───bash(1234)
遇到“树断了”或结果不符合预期时怎么办
pstree 有局限性:不显示僵尸进程(STAT=Z)、跨用户进程需 sudo、容器内进程因 PID namespace 隔离而不可见,刚 fork 还没 exec 的进程也可能不出现。此时应切换到原始字段验证:
- 交叉验证 PPID:
ps -o pid,ppid,comm -p 1234 - 查所有进程的父子关系(含僵尸):
ps -eo pid,ppid,comm,state - 容器内进程树得进容器看:
docker exec -it <container> pstree -p</container> - 没装 pstree?用
ps --forest -o pid,ppid,cmd模拟树状效果
辅助理解:为什么有些进程直接挂在 systemd(1) 下
守护进程(如 nginx、redis-server)常采用 double-fork 技术,让子进程脱离终端控制、PPID 变成 1。pstree 就会把它显示为 systemd 的直系后代,而不是你执行的启动脚本。这不是异常,而是设计行为。若需确认是否被 systemd 管理,可运行 systemctl status <service></service> 查看 Unit 启动方式。











