pstree是linux原生树状展示进程关系的命令,默认以systemd(pid 1)为根显示当前用户进程树,缩进体现父子层级,加-p显示唯一pid可精准定位派生链,-u标注用户,-a显示完整命令,-s追溯父链,sudo可查看系统级进程。

pstree 是唯一原生支持树状展示进程关系的命令,ps 加 --forest 只是模拟,且默认不显示父子 PID 关系。
怎么快速看懂谁启动了谁
直接运行 pstree 就能以 ASCII 树形图显示所有进程的父子结构,根节点通常是 systemd(PID 1)或 init。每个分支代表一个父进程及其直接子进程,缩进层级即表示调用深度。
- 相同名称的子进程会被合并显示为
3*[{chrome}]这类简写,想展开看每个实例要加-c - 如果只关心当前 shell 启动的进程链,用
pstree -s $$,它会反向显示从当前进程到 init 的祖先路径 - 终端里执行
pstree默认只显示当前用户进程;要看到全部(比如 root 启动的服务),得加sudo
为什么加 -p 比只看名字更可靠
进程名可能被篡改或重复(比如多个 bash),但 PID 唯一且不可伪造。加 -p 后每个节点变成 sshd(1234)───bash(5678)───pstree(9012),一眼就能确认调用链是否符合预期。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
-p会自动禁用紧凑模式,避免同名进程被折叠,这点容易忽略 - 如果目标进程是 systemd 服务,仅靠名字难区分实例,必须结合 PID 定位,例如
pstree -p | grep -A2 nginx - 某些容器环境里,
pstree默认看不到其他命名空间的进程,此时sudo pstree -p也无效,得进对应 namespace 查
排查服务异常时怎么精准定位子进程
当某个服务(如 nginx)卡死或资源异常,不能只查主进程,得看它实际派生了哪些子进程。用 pstree -p $(pgrep nginx) 或 pstree -p 1234(1234 是 master 进程 PID)。
- 输出中若出现
[nginx](方括号包住)表示该进程已 detach 成守护进程,没有控制终端 - 如果子进程状态异常(比如大量
[defunct]),说明有僵尸进程,需检查父进程是否没调用wait() -
pstree -ap能显示完整命令行参数,对识别恶意进程或调试配置加载路径很关键,但注意部分参数可能被截断
容易被忽略的权限和兼容性问题
普通用户运行 pstree 看不到其他用户的进程树(包括 root 的关键服务),且不同发行版默认行为略有差异:CentOS/RHEL 默认隐藏 UID 变更细节,Ubuntu 则可能显示更多上下文。
- 加
-u才能看到 UID 变更点,比如sudo启动的子进程会标出真实 UID,这对审计提权行为有用 - 在 Alpine Linux 等精简系统里,
pstree可能未预装,需手动apk add psmisc -
pstree不支持实时刷新,要看动态变化得配合watch -n1 'pstree -p',但高频刷新可能增加内核负担










