人人都会AI编程

pstree:进程树结构查看

更新时间:2026-07-12

在 Linux 中,所有进程(除了初始进程 initsystemd)都是由其他进程通过 forkexec 创建的子进程,这自然形成了一棵进程树。pstree 命令正是用来以树状结构直观展示当前系统中进程之间的父子关系。相比直接用 ps 查看进程列表,pstree 更容易让人一眼看出哪些进程是谁启动的,以及它们之间的层次依赖。

基本用法

直接在终端输入 pstree,会输出从 systemd(或 init)开始的整棵进程树:

pstree

示例输出(部分):

systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─cron
        ├─dbus-daemon
        ├─sshd───sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        └─systemd-udevd

从输出中可以清楚看到 sshd 主进程下 fork 出了子 sshd 用于处理远程连接,该子进程又启动了 bash,而 bash 执行了 pstree 命令本身。

常用选项

  • 显示 PIDpstree -p

在每个进程名后附加进程 ID,这对于后续用 kill 管理进程非常直接。

  pstree -p
  

输出示例:sshd(850)─┬─sshd(1234)───sshd(1235)───bash(1236)───pstree(4567)

  • 显示特定进程的子树pstree <PID>pstree <用户名>

只查看某个进程或其所属用户启动的进程树。

  pstree 1234      # 只看 PID 1234 及其子孙进程
  pstree john      # 只看用户 john 的进程
  
  • 紧凑或展开显示pstree -c(禁用压缩重复子进程)、-a(显示命令行参数)

有时 pstree 会将相同的子进程合并显示为 N*[进程名],用 -c 可以强制展开每个进程。-a 则会将启动命令的完整参数也显示出来,特别适合查看某服务的具体配置。

  pstree -a
  

示例:sshd -Dnginx: master process /usr/sbin/nginx -g daemon on;

  • 高亮当前进程pstree -h

通常会高亮显示当前 shell 所在进程及其祖先进程,方便定位自己在整棵树中的位置。

实用场景

  1. 理清服务启动关系:当某个守护进程出问题时,用 pstree 可以迅速确认它是被 systemd 直接管理,还是由其他监控程序(如 supervisord)拉起的。
  2. 发现孤儿或意外残留进程:如果某个父进程已经退出,但其子进程被 init 收养,在树中会直接挂在 systemd 下面。这能帮助判断进程是否正常。
  3. 快速定位僵尸进程的父进程:结合 ps aux | grep Z 找到僵尸进程 PID,再用 pstree -s <PID> 查看它的父进程是谁,从而找出没有妥善回收子进程的程序。
  4. 了解容器或命名空间进程结构:在容器内部运行 pstree 通常只会显示以 PID 1 为根的进程树,可直接看清容器中实际运行的所有进程及层次。

pstree 的输出一目了然,既适合日常快速检查,也适合在脚本中与其他命令配合使用。当系统上运行着几十甚至几百个进程时,它比直线列表更能帮你理解进程间的“亲子关系”,是管理 Linux 系统时必备的轻量工具之一。