Linux中的Pstree命令

时间:2020-03-05 15:29:12  来源:igfitidea点击:

在Linux机器上工作时,有时我们可能需要找出当前正在运行的进程。
我们可以使用许多命令来查找有关正在运行的进程的信息,其中最常用的是“ ps”和“ top”。

在本文中,我们将讨论“ pstree”命令。
它类似于'ps',但是没有列出正在运行的进程,而是将它们显示在树中。

树状格式是一种更方便的方式来显示流程层次结构,并使输出在视觉上更具吸引力。

如何使用“ pstree”命令

“ pstree”命令的常规语法如下:

ps [OPTIONS] [USER or PID]

在没有任何选项或者参数的情况下,“ pstree”以最简单的形式显示所有正在运行的进程的分层树结构:

pstree
systemd─┬─VBoxService───7*[{VBoxService}]
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─2*[agetty]
        ├─atd
        ├─cron
        ├─dbus-daemon
        ├─irqbalance───{irqbalance}
        ├─2*[iscsid]
        ├─lvmetad
        ├─lxcfs───2*[{lxcfs}]
        ├─networkd-dispat───{networkd-dispat}
        ├─nginx───2*[nginx]
...

树中的top/root项目是所有系统进程的父进程。
在此示例中,它是'systemd',这是启动时启动的第一个进程。

“ pstree”通过将相同的分支放在方括号之间并为它们加上代表分支数量的整数作为前缀来合并它们。
这使输出更具可读性和视觉吸引力。

下面是显示如何使用方括号的示例:

├─2*[agetty]

与:

├─agetty        
├─agetty

要禁用相同分支的合并,请使用'-c'选项:

pstree -c

进程的线程显示在父进程下,并使用花括号内的进程名称显示。
这是一个例子:

├─lxcfs───2*[{lxcfs}]

使用“ -t”选项显示完整的线程名称。
如果要隐藏线程并仅显示进程,请使用'-T'选项。

通常,“ pstree”会显示屏幕上无法显示的多行输出。
要一次查看一页输出,请将其通过管道传递到“ less”命令:

pstree | less

如果给定用户名作为参数,则“ pstree”仅显示该用户拥有的进程。
例如,以下命令将仅显示由名为“ theitroad”的用户启动的那些进程:

pstree theitroad

当将PID指定为参数时,“ pstree”将显示一棵以给定进程作为树根的树。
这是一个例子:

pstree 1943
sshd───bash───pstree

要显示给定进程的父进程,请使用“ -s”选项,后跟进程PID:

pstree -s 1943
systemd───sshd───sshd───bash───pstree

显示PID和PGID

通常,在运行“ pstree”命令时,用户正在寻找的最重要的信息是进程ID。
例如,知道PID可以让我们杀死一个故障过程。

'-p'选项指示'pstree'显示PID:

pstree -p

每个进程或者线程后的括号中都显示PID。

systemd(1)─┬─VBoxService(955)─┬─{VBoxService}(956)
           │                  ├─{VBoxService}(957)
           │                  ├─{VBoxService}(958)
           │                  ├─{VBoxService}(959)
           │                  ├─{VBoxService}(960)
           │                  ├─{VBoxService}(961)
           │                  └─{VBoxService}(962)
...

默认情况下为'pstree',按名称对具有相同父项的进程进行排序。
'-n'选项告诉'pstree'使用数字排序,例如:按PID排序:

pstree -pn

一个或者多个进程组ID是进程组的第一个成员的进程ID。
要查看PGID,请使用'-g'选项:

pstree -g

每个进程或者线程之后的括号中也会显示PID。

systemd(1)─┬─VBoxService(954)─┬─{VBoxService}(954)
           │                  ├─{VBoxService}(954)
           │                  ├─{VBoxService}(954)
           │                  ├─{VBoxService}(954)
           │                  ├─{VBoxService}(954)
           │                  ├─{VBoxService}(954)
           │                  └─{VBoxService}(954)
...

显示PID或者PGID时,将隐式禁用合并。

显示命令行参数

可以使用指定为命令行参数的配置选项来调用某些程序。

默认情况下,“ pstree”不会向我们显示正在运行的进程的命令行参数。
要查看该过程是如何开始的,请将该命令与“ -a”方法一起使用:

pstree -a
...
  ├─agetty -o -p -- _--keep-baud 115200,38400,9600 ttyS0 vt220
  ├─agetty -o -p -- _--noclear tty1 linux
...

突出显示

“ pstree”还允许我们突出显示流程以更好地呈现视觉效果。

“ -h”选项指示“ pstree”突出显示当前进程及其所有祖先。

pstree -h

要突出显示特定进程,请使用“ -H”选项,后跟进程ID:

pstree -H PID_NUMBER

如果不支持突出显示,则命令将退出并显示错误。