pstree 命令是一个在 Unix-like 系统中用于以树状图的形式显示当前运行的进程的命令。这种展示方式比简单的列表(ps查看)更加直观,有助于用户快速理解进程的层次结构和父子关系。
在诊断系统问题时,pstree 可以帮助确定哪些进程是问题的根源。通过查看受影响的进程及其父进程,可以追踪问题的来源,并采取适当的措施进行修复。
基本用法
在命令行中直接输入 pstree,将会显示一个树状图,其中包含了所有当前活跃的进程,以及它们之间的父子关系。根节点通常是 init(或 systemd,在现代 Linux 系统中)进程,它是所有用户空间进程的祖先。
树状图的解读
- 根节点:通常,树状图的根节点是init进程(在某些系统中可能是systemd),它是所有用户级进程的祖先。
- 子节点:每个进程(除了根节点外)都有一个或多个父进程,并可能有一个或多个子进程。在树状图中,子进程会作为父进程的子节点显示,通过连线连接。
- 进程名称与PID:在树状图中,每个进程旁边通常会显示其名称和进程ID(PID)。这有助于识别特定的进程。(需要结合参数-p)
- 缩进与层级:进程的层级关系通过缩进来表示,缩进越多的进程表示其层级越深,即它离根节点的距离越远。
- 特殊标记:有时,树状图中会使用特殊标记来表示进程的状态或特性,以下是常见的特殊标记:
1)小括号 ( )
在pstree的输出中,小括号通常用于显示进程的PID(进程ID)或其他特定信息。这些信息通常被放置在进程名称后面的括号内。但请注意,pstree命令的默认输出格式可能不包括直接在小括号中显示PID,这取决于所使用的选项和版本。
2)中括号 [ ]
中括号在pstree的输出中有几个可能的用途:
- 表示内核进程:在某些情况下,特别是当进程是内核线程时,它们可能会被中括号包围起来。这用于区分内核线程与普通用户空间进程。
- 合并相同分支:pstree通过将相同的分支放在方括号中并以重复计数作为前缀,在视觉上合并它们。这有助于简化输出,使树形结构更加清晰。例如,如果有多个getty进程,它们可能会被合并显示为4*[getty]。
注意:中括号【】主要是用于在视觉上合并具有相同父进程和名称的多个进程/线程,以使输出更加简洁和易于理解。这里的“相同的分支”通常指的是用户空间中的多个进程/线程实例,而非内核线程/进程,内核线程是运行在内核空间中的特殊进程,它们不属于任何用户会话。
3)大括号 { }
大括号在pstree的输出中通常用于表示进程的线程。当进程有多个线程时,这些线程可能会以父进程名称后跟大括号包围的形式出现,并在大括号内列出线程的名称(尽管在某些情况下,线程名称可能与父进程名称相同)。这种表示法用于指示这些线程属于同一个父进程。
常用选项
注意:不同版本的linux发行版,pstree是不同的(不光是pstress命令,其他命令也可能不同),有些参数可能不支持。
- -a 或 --arguments:显示命令行参数。这个选项会让 pstree 显示每个进程的命令行参数。
- -c:显示进程的ID(PID)和父进程ID(PPID)的连线。默认情况下,进程树是通过缩进来表示父子关系的,而 -c 选项则会用连线明确标出每个进程的PPID。
- -h 或 --highlight-all:高亮显示所有进程。默认情况下,只有当前用户启动的进程会被高亮显示。使用此选项可以高亮显示所有进程。
- -H <pid>:只高亮显示指定的进程及其子进程。<pid> 是你想要高亮的进程的PID。
- -l 或 --long:显示进程的完整命令行。默认情况下,如果命令行太长,pstree 会截断它。这个选项可以确保显示完整的命令行。
- -n:以数字形式显示用户和组ID,而不是名称。
- -p:显示进程的PID。
- -s:显示进程的启动时间。
- -u:显示进程的用户名。
- -G <grpname>:只显示属于指定组名的进程。<grpname> 是你想要筛选的组的名称。
- -U <username>:只显示指定用户名的进程。<username> 是你想要筛选的用户的名称。
- -P:按照PID的顺序而不是创建顺序来排序同一父进程的子进程。
- --version:显示 pstree 的版本信息。
- --help:显示帮助信息,列出所有可用的选项和简短说明。