在Linux工作时,有时您可能需要找出当前正在运行的进程。您可以使用许多命令来查找正在运行的进程的信息,其中pstop是最常用的命令。

在本教程中,我们将讨论pstree命令。它类似于ps命令,列出正在运行的进程并将它们显示在树中。

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

pstree命令

pstree命令语法形式是ps [OPTIONS] [USER or PID]。在没有任何选项或参数形式运行pstree命令时,pstree以树的形式显示所有正在运行的进程。

树中的最顶部是所有进程的父进程。在此示例是systemd进程,这是系统启动的第一个进程。

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]
...

以下是显示如何使用方括号显示进程的示例,

├─2*[agetty]
使用方括号显示进程
├─agetty        
├─agetty
不使用方括号显示进程

如果要禁用相同分支的合并,请使用-c选项,子进程显示在父进程下并在花括号内的显示子进程的名称。

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

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

pstree -c
pstree | less
xdg-permission-─┬─{xdg-permission-}
                └─{xdg-permission-}

查找进程

如果使用用户名作为参数,pstree仅显示该用户拥有的进程。例如,命令pstree myfreax将仅显示由myfreax用户启动的进程。

如果将进程PID指定为参数,pstree将显示一棵以指定进程根的树。例如命令pstree 1943

要打印指定进程的父进程,请使用-s选项,后跟进程PID,例如命令pstree -s 1943

pstree myfreax
pstree 1943
pstree -s 1943

打印PID PGID

通常,当运行pstree命令时,用户正在寻找的最重要信息是进程ID。例如,要知道PID才可以Kill掉发生故障的进程。

pstree命令的-p选项将会打印进程的PID,每个进程或线程后的括号中均显示PID。

默认情况下,pstree按名称对具有相同父进程的进程进行排序。 可以使用-n选项`使用数字排序,即按PID排序。

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

如果要查看进程的组Id,也就是PGID,请使用-g选项,这将会在子进程中显示进程的ID,也就PID。

为了可以显示子进程的父进程ID,这时将隐式禁用合并选项-c

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

打印进程启动参数

我们知道在启动某个进程时可能需要指定很多参数,至此,我们都未在pstree中找到进程完整启动命令。

默认情况下,pstree不会向您显示正在运行的进程的命令行参数,也就是进程启动参数。要查看进程是如何启动的,请使用pstree命令的-a选项。

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

高亮进程

pstree还可以使您突出显示进程以更好地呈现视觉效果。-h选项指示pstree突出显示当前进程及其父进程。

要高亮显示指定的进程,请使用-H选项,然后是进程ID。如果不支持高亮显示,则命令将退出并显示错误。

pstree -H PID_NUMBER

结论

pstree命令以树结构的形式显示正在运行的进程。要查看所有可用pstree选项的信息,请在终端中输入man pstree

如果您有任何问题或反馈,请随时发表评论。