pstree是一个Linux下的命令,通过它可以列出当前的进程,以及它他们的树状结构。通过pstree可用于分析进程的状态、间关系已经在特定的场合,比病毒排查中有重要的作用。
说直白一点,即ps+tree,ps命令可以显示当前正在运行的那些进程的信息,tree主要功能是创建文件列表,将所有文件以树的形式列出来。pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,以树状展示,可以清楚的看出来是谁创建了谁。
安装
默认系统中是没有安装pstree命令的,使用pstree需要安装psmisc软件包。
#不同的操作系统使用以下命令来安装 #在 Mac OS上 brew install pstree #在 Fedora/Red Hat/CentOS yum -y install psmisc #在 Ubuntu/Debian apt-get install psmisc
语法
pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user] #或使用man函数查找使用方法 man pstree
-a 显示该行程的完整指令及参数, 如果是被记忆体置换出去的行程则会加上括号
-c 如果有重覆的行程名, 则分开列出(预设值是会在前面加上 *) -A: 各进程树之间的连接以ASCII码字符来连接 -U:各进程树之间的连接以utf8字符来连接,某些终端可能会有错误 -p:同时列出每个进程的PID -u: 同时列出每个进程的所属账号名称:
例子
#1.以树状图只显示进程的名字,且相同进程合并显示: [root@blog ~]# pstree systemd─┬─NetworkManager───2*[{NetworkManager}] ├─YDLive───6*[{YDLive}] ├─YDService─┬─YDEdr───11*[{YDEdr}] │ └─22*[{YDService}] ├─acpid ├─2*[agetty] ├─atd ├─auditd───{auditd} ├─barad_agent─┬─barad_agent │ └─barad_agent───4*[{barad_agent}] ├─crond ├─dbus-daemon …… #2.显示进程并显示pid,每个进程括号里的则是pid号 [root@blog ~]# pstree -p systemd(1)─┬─NetworkManager(32014)─┬─{NetworkManager}(32020) │ └─{NetworkManager}(32022) ├─YDLive(1804)─┬─{YDLive}(1805) │ ├─{YDLive}(1806) │ ├─{YDLive}(1807) │ ├─{YDLive}(1810) │ ├─{YDLive}(1813) │ └─{YDLive}(21032) ├─YDService(1812)─┬─YDEdr(1828)─┬─{YDEdr}(1832) │ │ ├─{YDEdr}(1833) │ │ ├─{YDEdr}(1834) │ │ ├─{YDEdr}(1835) │ │ ├─{YDEdr}(1836) │ │ ├─{YDEdr}(1837) │ │ ├─{YDEdr}(1838) │ │ ├─{YDEdr}(1839) │ │ ├─{YDEdr}(1840) │ │ ├─{YDEdr}(1841) │ │ └─{YDEdr}(1855) │ ├─{YDService}(1814) …… #3.查看pid的进程与子进程:pstree -p [pid] [root@blog ~]# pstree -p 1408 sshd(1408)───sshd(24182)─┬─bash(19110)───sleep(19120) ├─bash(24184)───pstree(19135) ├─bash(24231)───top(24325) └─sftp-server(24223) #4.以树状图显示进程,相同名称的进程不合并显示,并且会显示命令行参数。 [root@blog ~]# pstree -a systemd --switched-root --system --deserialize 22 ├─NetworkManager --no-daemon │ └─2*[{NetworkManager}] ├─YDLive │ └─6*[{YDLive}] ├─YDService │ ├─YDEdr │ │ └─11*[{YDEdr}] │ └─22*[{YDService}] ├─acpid ├─agetty --noclear tty1 linux ├─agetty --keep-baud 115200,38400,9600 ttyS0 vt220 ├─atd -f ├─auditd │ └─{auditd} ├─barad_agent │ ├─barad_agent │ └─barad_agent │ ├─sh -c ntpdate -b -d ntpupdate.tencentyun.com 2>&1 | grep 'step time server' | sed -r 's/.*offset(.*)sec.*/\\1/' │ │ ├─grep step time server ……
以上为常用的参数搭配,可实践敲一下,感受下Linux系统设计与pstree命令巧妙之处。