一聚教程网:一个值得你收藏的教程网站

热门教程

Linux 中如何通过进程树查看父子进程关系

时间:2026-08-29 11:32:49 编辑:袖梨 来源:一聚教程网

最准的进程树查看命令是 pstree -p。它用缩进和连接符直观展示派生链,如 sshd(790)───bash(1245)───curl(1267),无需手动比对 PID/PPID;查全系统需 sudo pstree -p,加 -u 标用户、-a 显完整命令行;可指定服务名或 PID 快速定位;注意线程(花括号)、合并显示(如 5*[nginx])及父进程退出后被 systemd 接管的情况。

直接用 pstree -p 最准。它用缩进和连接符天然表达派生链,比如 sshd(790)───bash(1245)───curl(1267),一眼就能看出 curl 是 bash 启动的,bash 又挂在 sshd 下。不需要手动比对 PID 和 PPID,也不会跳层漏看。

查全系统进程树要加 sudo

默认 pstree 只显示当前用户启动的进程,nginx、mysql、systemd 服务等根本不会出现——不是命令错了,是权限限制。哪怕你用 sudo systemctl start nginx 启动,worker 进程也不会出现在无权限的输出里。要看到完整树,必须运行:

  1. sudo pstree -p
  2. -u 可标出所属用户:sudo pstree -pu
  3. -a 显示完整命令行,区分同名但参数不同的进程(如两个 java 进程加载不同 jar)

快速定位目标进程,别扫整棵树

全系统树动辄上百行,靠眼睛找效率低。直接指定目标缩小范围:

  1. 查服务名:pstree -p nginx(注意大小写,Nginx 不匹配)
  2. 查某 PID 的所有后代:pstree -p 1234
  3. 反向追溯祖先链:pstree -s 1234,输出形如 systemd(1)───sshd(790)───bash(1234)

看清线程、合并与断链,避免误判

pstree 默认会隐藏线程、合并同名进程,容易误导:

  1. 带花括号的条目(如 {gdbus})是线程,不是独立子进程;加 -t 才显式显示
  2. 5*[nginx] 表示 5 个同名进程,但不等于 5 个独立 fork 出来的 worker;需结合 ps -eo pid,ppid,comm 验证实际派生关系
  3. 如果某进程突然挂到 systemd(1) 下,大概率是父进程已退出、被 init 接管,此时应立刻补查 ps -eo pid,ppid,state 看原始状态

热门栏目