pstree 是一个在 Linux/Unix 系统上非常有用的命令行工具,它以树状图的形式直观地展示系统中正在运行的进程,清晰地揭示进程之间的父子关系和层级结构。通过这种可视化的方式,可以比 ps 命令输出的线性列表更容易理解系统进程的全貌。
bash
用法:pstree [-acglpsStTuZ] [ -h | -H 进程号 ] [ -n | -N 类型 ]
[ -A | -G | -U ] [ 进程号 | 用户 ]
或:pstree -V
显示进程树。
-a, --arguments 显示命令行参数
-A, --ascii 使用 ASCII 行绘制字符
-c, --compact-not 不要对完全相同的子树进行压缩
-C, --color=类型 按照指定属性对进程上色
(age)
-g, --show-pgids 显示进程组 ID;隐含启用 -c 选项
-G, --vt100 使用 VT100 行绘制字符
-h, --highlight-all 高亮显示当前进程和其所有祖先
-H PID, --highlight-pid=PID
高亮显示指定 PID 对应的进程和其所有祖先
-l, --long 不要截断长行
-n, --numeric-sort 按照 PID 对输出进行排序
-N 类型, --ns-sort=类型
按照指定命名空间类型对输出进行排序
(cgroup, ipc, mnt, net, pid, time, user, uts)
-p, --show-pids 显示 PID;隐含启用 -c 选项
-s, --show-parents 显示所选进程的父进程
-S, --ns-changes 显示命名空间的变化
-t, --thread-names 显示完整线程名称
-T, --hide-threads 隐藏线程,只显示进程
-u, --uid-changes 显示用户 ID(UID)的变化
-U, --unicode 使用 UTF-8(Unicode)的行绘制字符
-V, --version 显示版本信息
-Z, --security-context
显示安全属性
进程号 从指定进程号开始;默认为 1(init)
用户 仅显示从指定用户的进程开始的进程树
核心功能:默认用法与基础选项
pstree 最常见的用法是直接执行,不带任何参数。它会以 init 或 systemd(PID 为 1)进程为根,显示系统中所有的进程树。
bash
pstree
执行后,你会看到类似下面的输出,树形结构清晰地展示了进程间的派生关系-1:
bash
init-+-getty
|-getty
|-getty
`-getty
为了让信息更丰富,有几个常用选项很值得了解:
-
-p:显示进程ID(PID):在每个进程名后面以括号形式显示其 PID,这对定位特定进程非常关键。 -
-u:显示用户ID变化:当进程的 UID 与父进程不同时,会在进程名后显示新的 UID,有助于观察权限切换情况。 -
-a:显示命令行参数:不仅显示进程名,还显示启动时使用的完整命令和参数,能更准确地识别进程。
关键特性:自动合并相同分支
pstree 的一个实用设计是自动合并完全相同的子进程分支,并用方括号和数字表示重复次数,使输出更紧凑、易读。
例如,如果系统有 4 个 getty 进程,默认显示会被精简为:
bash
init---4*[getty]
若想禁用此特性,显示完整的树状结构,可以使用 -c 选项。
定位与筛选:查看特定进程的信息
-
指定PID或用户名:在命令后直接加上 PID 或用户名,可以只查看该进程及其子进程,或该用户拥有的所有进程树。
-
-s:显示父进程:查看指定进程的父进程链,对于追溯进程来源非常有帮助。 -
-h或-H <PID>:高亮显示当前进程(或指定 PID 的进程)及其所有祖先进程,便于在复杂树中快速定位。
进阶选项:深入探索
-
-g:显示进程组ID(PGID):显示每个进程所属的进程组 ID,常用于作业控制分析。 -
-t:显示线程名 :在父进程下显示其子线程,线程名会放在花括号{}中。使用-T则相反,会隐藏所有线程。 -
-n:按PID排序:默认按进程名排序,此选项会让同一父进程下的子进程按 PID 数值排序。 -
-l:显示长行:默认输出会根据终端宽度截断,此选项可显示完整信息。 -
-Z:显示安全上下文:在支持 SELinux 的系统上显示进程的安全上下文。 -
绘图字符选项 :
-A(ASCII字符)、-G(VT100字符)、-U(Unicode/UTF-8字符) 可用于适应不同终端环境。
实用示例
| 命令 | 目的 |
|---|---|
pstree -p |
显示所有进程及其 PID |
pstree -a |
显示所有进程的完整命令和参数 |
pstree -s 1234 |
显示 PID 为 1234 的进程及其所有父进程 |
| `pstree -p | grep ssh` |
以上是 pstree 的核心用法和主要选项。它的输出直接来源于 /proc 文件系统,因此在某些受限环境下(如挂载了 hidepid 选项的 /proc),其显示的信息可能会受限。