学习一个Linux命令-pstree
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命令巧妙之处。
编辑于 2021-06-03 19:24