pstree 命令更优雅的树状显示

pstree 命令更优雅的树状显示

Linux pstree命令将所有行程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的行程。

在Linux系统中,系统调用fork可以创建子进程,通过子shell也可以创建子进程,Linux系统中进程之间的关系天生就是一棵树,树的根就是进程PID为1的init进程。

命令参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
pstree: unrecognized option '--help'
Usage: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -g ] [ -u ]
[ -A | -G | -U ] [ PID | USER ]
pstree -V
Display a tree of processes.

-a, --arguments 显示命令参数
-A, --ascii 使用 ASCII 画线
-c, --compact 不压缩相同的子进程
-h, --highlight-all 高亮现在执行的程序
-H PID, --highlight-pid=PID 高亮指定的程序
-g, --show-pgids 显示进程组ID; implies -c
-G, --vt100 使用 VT100 画线
-l, --long 不截断长的行
-n, --numeric-sort 按照pid进行排序
-N type,
--ns-sort=type 用程序识别码排序(ipc, mnt, net, pid, user, uts)。预设是以程序名称来排序;
-p, --show-pids 显示pid; implies -c
-s, --show-parents 显示进程的父ID
-S, --ns-changes 显示 namespace 信息
-u, --uid-changes 显示 用户 名称
-U, --unicode 使用 UTF-8 (Unicode) 画线
-V, --version 显示版本
-Z,
--security-context 显示 SELinux 内容
PID start at this PID; default is 1 (init)
USER show only trees rooted at processes of this user

示例

以树状图只显示进程的名字,且相同进程合并显示: pstree

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@node1 ~]# pstree
systemd─┬─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─VBoxService───8*[{VBoxService}]
├─agetty
├─auditd───{auditd}
├─chronyd
├─containerd───10*[{containerd}]
├─crond
├─dbus-daemon
├─gssproxy───5*[{gssproxy}]
├─irqbalance
├─keepalived───2*[keepalived]
├─kube-apiserver───8*[{kube-apiserver}]
├─kube-controller───7*[{kube-controller}]
├─kube-proxy───7*[{kube-proxy}]
├─kube-scheduler───9*[{kube-scheduler}]
├─kubelet───13*[{kubelet}]
├─polkitd───6*[{polkitd}]
├─rpc.statd
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───sshd───bash───sudo───su───bash───pstree
├─supervisord───etcd───7*[{etcd}]
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─tuned───4*[{tuned}]

以树状图显示进程同时还显示PID:pstree -p

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@node1 ~]# pstree -p
systemd(1)─┬─NetworkManager(2494)─┬─dhclient(2530)
│ ├─{NetworkManager}(2509)
│ └─{NetworkManager}(2512)
├─VBoxService(2316)─┬─{VBoxService}(2318)
│ ├─{VBoxService}(2319)
│ ├─{VBoxService}(2320)
│ ├─{VBoxService}(2321)
│ ├─{VBoxService}(2322)
│ ├─{VBoxService}(2326)
│ ├─{VBoxService}(2327)
│ └─{VBoxService}(2328)
├─agetty(506)
├─auditd(414)───{auditd}(415)
├─chronyd(455)
├─containerd(910)─┬─{containerd}(943)
│ ├─{containerd}(944)
│ ├─{containerd}(945)
│ ├─{containerd}(946)
│ ├─{containerd}(987)
│ ├─{containerd}(1017)
│ ├─{containerd}(1034)
│ ├─{containerd}(1150)
│ ├─{containerd}(1151)
│ └─{containerd}(1312)
├─crond(505)
├─dbus-daemon(452)
... 省略部分结果

以树状图显示进程PID为的进程以及子孙进程,如果有-p参数则同时显示每个进程的PID:pstree [-p]

1
2
3
4
5
6
7
8
[root@node1 ~]# pstree -p 918
etcd(918)─┬─{etcd}(930)
├─{etcd}(931)
├─{etcd}(932)
├─{etcd}(948)
├─{etcd}(952)
├─{etcd}(1057)
└─{etcd}(1072)

以树状图显示进程,相同名称的进程不合并显示,并且会显示命令行参数,如果有-p参数则同时显示每个进程的PID。pstree -a

1
2
3
4
5
6
7
8
9
10
11
12
13
pstree -a -p 910
containerd,910 --config /data/apps/containerd/containerd-config.toml
├─{containerd},943
├─{containerd},944
├─{containerd},945
├─{containerd},946
├─{containerd},987
├─{containerd},1017
├─{containerd},1034
├─{containerd},1150
├─{containerd},1151
└─{containerd},1312
...省略部分结果

注:因为pstree输出的信息可能比较多,所以最好与more/less配合使用,使用上下箭头查看,按q退出。pstree -p | less

参考文档

pstree命令
linux每日命令(34):ps命令和pstree命令