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命令