在日常运维中,我们大概率都遇到过这些糟心场景:
凌晨3:00,告警炸响,服务器cpu飙升至100%。你ssh连上,ps aux刷出几百行进程列表。哪个是罪魁祸首?它的父进程是谁?为什么kill掉后,它像幽灵一样又出现了?
这种“进程迷雾”的困境,往往不是因为问题复杂,而是工具没选对。今天,介绍你的运维“透视镜”-pstree。
今天给大家深挖 pstree,linux中被严重低估的进程树可视化神器。不同于ps的平铺罗列,pstree以树形结构展示所有进程的父子、继承、衍生关系,一眼看透进程链路,排查效率直接翻倍。
linux所有进程都遵循一个核心规则:所有进程都有父进程,父进程可衍生多个子进程,子进程又能创建孙进程,形成完整的进程链路。
我们常用的ps -ef命令,仅能平铺展示所有进程,只能单独查看进程pid和父pid,无法直观、完整展示进程层级关系,排查复杂问题极其费力。
pstree 核心优势:
树形可视化排版,父子进程层级一目了然;
自动合并同名进程,避免屏幕刷屏,核心信息更清晰;
支持展示pid、运行用户、完整启动命令;
精准定位进程源头、僵尸进程、孤儿进程。
一句话总结:看进程详情用ps,看进程关系、排错溯源用pstree!
yum -y install psmisc pstree [选项] [pid/用户名/进程名]三、pstree6大高频实战命令
我结合日常运维并查找资料,整理运维日常99%场景适用的实战命令,简单易懂。
场景1:查看全局进程树
pstree
这个命令是登陆新服务器后的首要检查项,能快速了解系统进程的整体架构,特别是识别出不寻常的进程分支。执行后展示系统完整进程树,从根进程systemd逐层展开所有衍生进程,自动合并同名进程,避免信息刷屏,快速掌握系统进程整体架构。
场景2:显示所有进程PID
仅看进程名称无法定位问题,排查故障必须对应pid,-p 是pstree最核心参数,务必熟记!没有pid的进程树就像没有页码的书,无法定位任何问题。-p参数是pstree的灵魂。
pstree -p
效果:每个进程后标注唯一pid,清晰区分主进程、子进程、工作进程,彻底解决进程主次分不清、无法定位的问题。
服务器进程繁杂,全局查看过于杂乱,可直接指定进程名或pid,只展示目标进程的完整链路。
示例1:查看nginx完整进程结构
pstree -p | grep -i nginx
可直观看到nginx主进程(master,一般在最上面)→ 多个worker工作进程的架构,如果worker数量为0或异常多,就有问题。
示例2:根据PID溯源进程父链路
#查看子进程pstree -p 7330#使用-s参数查看完整父进程链pstree -ps 7330


精准展示该pid进程的父、子、孙所有关联进程,完美解决不知道进程由谁启动、归属哪个服务的难题。如果看到crond,就是定时任务在重启;如果看到某个监控脚本,就是它在守护。
进程启动失败、配置不生效,大多是启动参数错误导致。-a 参数可展示完整启动命令、路径及附加参数:
#查看指定pid进程的启动命令pstree -a pid#查看docker启动参数pstree -a | grep -E "docker|dockerd|containerd" | head -10#查看dockerpid进程的启动参数命令pstree -a 6832(docker的pid)

这样可以显示进程的完整启动命令和参数。
查看root用户的所有启动进程
pstree -a -u root
pstree默认自动合并同名进程,若需要统计真实进程数量、排查进程溢出,可通过 -c 参数取消合并:
pstree -cp nginx |grep nginx |wc -l#或者使用grep -cpstree -cp | grep -c "nginx"

适合高并发服务排查,精准统计子进程数量,判断是否存在异常创建、进程堆积问题。
注意:-c参数会禁用同名进程合并,在进程数量很多时(如数百个php-fpm进程),输出会非常长。建议仅在需要精确统计或排查时使用,日常查看使用默认合并模式更清晰。
pstree可以实时观察进程树的创建、销毁、数量变化。
watch -n 2 'pstree -p 服务名'#比如动态监控nginx的worker数量变化watch -n 1 'echo "$(date) Worker数量: $(pstree -p nginx | grep -c "nginx")"'

适合批量排查系统启动进程、有序进程溯源、进程初始化链路排查。
四、核心实战排错
熟练使用命令是基础,落地排错、解决实际问题才是核心,分享3个线上最高频的排查方案。
问题现象:手动kill掉异常进程,几秒后自动重启,无法彻底关闭。
根本原因:只杀死了子进程,顶层父进程依然存活,持续自动拉起新的子进程。
标准排查步骤:
执行pstree -p进程pid,追溯找到最顶层父进程
判断父进程来源:系统守护进程、定时任务、服务托管程序。
先停止顶层父进程/关闭对应的守护机制,再kill子进程,彻底根治问题
问题现象:系统存在大量僵尸进程,无法定位归属服务,不敢随意清理。
核心原理:子进程退出后,父进程未及时回收资源,就会产生僵尸进程。
排查方案:通过pstree快速定位僵尸进程对应的父进程,重启父进程即可自动回收所有僵尸进程,无需重启服务器,无损解决问题。
问题现象:ssh远程后台运行的脚本/程序,退出终端后进程直接消失。
问题溯源:通过pstree可清晰看到,进程依附ssh终端进程,终端退出后,父进程销毁,子进程随之被系统回收。
终极解决方案:使用nohup、screen、tmux等工具托管进程,让进程脱离ssh终端父进程,实现后台永久稳定运行。
-p:显示所有进程PID(排查必备参数)
-u:显示进程运行所属用户,排查权限问题
-a:展示进程完整启动命令、路径及参数
-c:不合并同名进程,展示所有独立进程
-h:高亮指定PID进程,快速锁定目标
-n:按PID数字升序排序进程
-s:溯源进程链路
六、注意事项
不要过度依赖 pstree -u:在某些系统上,-u不能显示用户名,建议用 ps -o user= -p pid替代。
理解 -p pid与 -sp pid的区别:前者显示以pid为根的子树,后者显示从根到pid的路径。
生产环境慎用pstree -c看全局:输出可能极大,造成终端卡顿,建议搭配grep或指定服务名。
很多运维人员习惯死守ps、top查进程,却忽略了pstree这个轻量化、高效率的神器。ps看进程状态,pstree 看进程关系,二者互补才是最优排查方案。
pstree带给你的不仅是命令,更是视角,从今天起,你的知识库中又多了一把武器。
一条简单的树形命令,就能搞定进程溯源、异常重启、僵尸进程、权限报错等绝大多数线上疑难问题,熟练掌握后,运维排错效率直接翻倍。记住下面命令,问题排查更迅速。
现象 → 用 top/ps找到嫌疑进程(pid);
溯源 → 用 pstree -sp pid查它从哪来;
定界 → 用 pstree -p pid看它影响了啥;
验证 → 用 pstree -a pid看启动参数;
监控 → 用 watch观察变化。
如果觉得文章对你的运维有帮助,记得点赞加收藏。