pstree 命令是以树形结构显示程序和进程之间的关系,此命令的基本格式如下:
[root@localhost ~]# pstree [选项] [PID或用户名]
表 1 罗列出了 pstree 命令常用选项以及各自的含义。
选项 | 含义 |
---|---|
-a | 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。 |
-c | 不使用精简法显示进程信息,即显示的进程中包含子进程和父进程。 |
-n | 根据进程 PID 号来排序输出,默认是以程序名排序输出的。 |
-p | 显示进程的 PID。 |
-u | 显示进程对应的用户名称。 |
需要注意的是,在使用 pstree 命令时,如果不指定进程的 PID 号,也不指定用户名称,则会以 init 进程为根进程,显示系统中所有程序和进程的信息;反之,若指定 PID 号或用户名,则将以 PID 或指定命令为根进程,显示 PID 或用户对应的所有程序和进程。
init 进程是系统启动的第一个进程,进程的 PID 是 1,也是系统中所有进程的父进程。
【例 1】
[root@localhost day09]# pstree -p
systemd(1)─┬─NetworkManager(730)─┬─dhclient(858)
│ ├─{NetworkManager}(744)
│ └─{NetworkManager}(747)
├─VGAuthService(654)
├─agetty(691)
├─anacron(1375)
├─auditd(632)───{auditd}(633)
├─chronyd(696)
├─crond(686)
├─dbus-daemon(660)───{dbus-daemon}(670)
├─firewalld(697)───{firewalld}(855)
├─lvmetad(497)
├─master(1201)─┬─pickup(1209)
│ └─qmgr(1210)
├─polkitd(656)─┬─{polkitd}(669)
│ ├─{polkitd}(671)
│ ├─{polkitd}(672)
│ ├─{polkitd}(678)
│ ├─{polkitd}(679)
│ └─{polkitd}(688)
├─rsyslogd(1051)─┬─{rsyslogd}(1059)
│ └─{rsyslogd}(1060)
├─sshd(1050)─┬─sshd(1306)───bash(1310)───pstree(1549)
│ └─sshd(1461)───bash(1465)
├─systemd-journal(479)
├─systemd-logind(658)
├─systemd-udevd(510)
├─tuned(1048)─┬─{tuned}(1296)
│ ├─{tuned}(1297)
│ ├─{tuned}(1299)
│ └─{tuned}(1301)
└─vmtoolsd(655)─┬─{vmtoolsd}(673)
└─{vmtoolsd}(681)
通过上面的红色部分可知,sshd启动了2个进程,目前有2个进程连接了本机的ssh服务,都启动了bash服务~
【例 2】如果想知道某个用户都启动了哪些进程,使用 pstree 命令可以很容易实现,以 mysql 用户为例:
[root@1ocalhost ~]# pstree mysql
mysqid---6*[{mysqid}]
此输出结果显示了 mysql 用户对应的进程为 mysqid,并且 mysqid 进程拥有 5 个子进程(外加 1 个父进程,共计 6 个进程)。