进程与作业69 条

ps 进程树展示

--forest 用缩进画出父子层级:查「这个进程是谁拉起来的」「批量清理一整棵进程树」时必用。

Linux 运维命令速查系统更新于 2026-10-13

ps 进程树展示是什么

ps 的 --forest 参数把进程按父子关系用缩进画成树形,一眼就能看出某个进程是谁拉起来的、下面还挂着哪些子进程。排查「这个后台任务属于哪个服务」、定位守护进程派生的 worker、或者要连带清理一整棵进程树时,这个视图比平铺列表高效得多。它依赖父进程号排序来画缩进,所以不要和其他排序参数混用;不想用 ps 也可以用系统里的 pstree 达到相近效果。

基本信息

适用平台GNU/Linux 的 procps-ng 版 ps(macOS 自带 ps 不支持该参数)
语法ps -ef --forest 或 ps -eo pid,ppid,cmd --forest
关键字段PID 进程号、PPID 父进程号、STAT 状态、CMD 命令行
替代命令pstree -p(按 PID 看子树)
注意事项--forest 与其他排序参数混用会破坏树形结构
权限普通用户即可,看他人进程详情受权限限制

典型使用场景

  • 查某个服务或端口被谁拉起来:沿着树形结构向上找父进程。
  • 清理遗留后台任务前确认整棵子树,避免只杀父进程留下一堆孤儿。
  • 排查定时任务或启动脚本派生出来的进程,弄清楚它们的来源。
  • 审计异常的进程树形态,例如某个 shell 下挂了大量可疑子进程。
  • 写故障记录时附上有层级关系的输出,比平铺列表更容易理解。

常用写法

常用写法
ps -ef --forest | head -40                             # 看进程树顶部结构
ps -eo pid,ppid,stat,cmd --forest | grep -B2 -A5 nginx  # 关注 nginx 及上下文
ps -eo pid,ppid,cmd --forest | awk '$3==1'              # 被 1 号进程收养的进程
ps -eo pid,ppid,cmd --forest | grep -A10 'systemd(1)'   # 从 init 往下的主要分支
ps -eo pid,ppid,stat,cmd --forest | grep -i defunct     # 找僵尸进程及其父进程
pstree -p 1234                                          # 以指定进程号为根看子树
ps -eo pid,ppid,cmd --forest | grep -E 'bash|sh' | head -20   # 找脚本派生的进程

字段逐列读法

字段或现象含义判断要点
PID进程号后续查句柄、终止进程都用它
PPID父进程号为 1 说明原父进程已退出
STAT进程状态Z 表示僵尸,D 表示不可中断等待
CMD命令行用于识别目标,注意同名进程
缩进层级父子关系缩进越深说明层级越靠下
TTY 为问号无控制终端通常是从终端分离的守护进程
--forest 依赖父进程号排序来画缩进,混入排序参数后树形结构会被打乱,看起来像平铺列表却仍被当作层级视图解读,结论很容易出错。
孤儿进程会被 1 号进程收养,所以树里挂在 1 号进程下的陌生进程要重点核查,它们通常来自已经退出的脚本或异常的守护进程。
批量清理时按树操作更安全:先确认父进程与全部子进程,再按从叶到根的顺序终止,避免残留一代又一代的孤儿进程继续占用端口与资源。

易错点

  • 只终止父进程而不处理子进程,子进程变成孤儿继续占用端口或资源;清理前用树形视图看清整棵结构再决定终止顺序。
  • 把 --forest 与排序参数混用,缩进被打乱却仍以为是层级视图,据此判断父子关系会得出错误结论。
  • 用管道加 grep 判断进程是否存在时命中了 grep 自身或同名进程,结论错误;用 pgrep 或加上排除条件更可靠。
  • 看到状态为 Z 的僵尸进程就去终止它,实际上僵尸已经结束、等待的是父进程回收;需要处理的是它的父进程。

数据来源与参考

  • man 1 ps(procps-ng 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌