在Linux 程序的运行实例称为进程。有时在Linux工作时,您可能需要找出当前正在运行的进程。

您可以使用许多命令来查找正在运行进程的信息,pstop也是最常用的命令。

在教程中,我们将讨论如何在Linux使用ps命令查看正在运行的进程以及查看进程的详细信息。

ps 命令

ps命令的语法是ps [OPTIONS]。出于历史和兼容性的原因,ps命令接受几种不同类型的选项。

UNIX风格选项,这种通常在ps命令后跟一个破折号。BSD风格选项,不带破折号。GNU长选项,后跟两个破折号。

你可以混合使用多种选项,但在某些情况下可能会出现冲突,因此最好坚持使用一种类型的选项。BSD和UNIX风格是最常用的。

不带任何选项运行ps命令,是最简单的形式。ps命令将打印四列信息,显示当前shell程序中正在运行的两个进程。shell程序本身以及调用ps命令时运行的进程。

ps
  PID TTY          TIME CMD
 1809 pts/0    00:00:00 bash
 2043 pts/0    00:00:00 ps

四列分别标记PIDTTYTIMECMDPID是进程ID。

在大多数情况下,运行ps命令时,用户寻找的最重要的信息是进程PID。了解PID可以使您终止故障进程。

TTY进程控制终端的名称。TIME进程使用CPU的时间,以分钟和秒为单位。CMD创建该进程的命令名称。

上面的输出不是很有用,因为它包含的信息不多。当使用其他选项运行ps命令时,ps命令的真正功能才能体现出来。

ps命令接受大量选项,这些选项可用于显示指定的一组进程以及进程的信息,但是在日常使用中只需要少数几个选项。ps命令最常与以下选项组合使用。

PS命令BSD风格

如果以BSD的风格运行PS命令是不带破折号-的,例如命令ps aux,将使用BSD风格选项来查看进程信息。

a选项将会展示所有用户的进程,但不包括关联终端的进程以及进程的父进程。u代表一种面向用户的格式,提供进程的详细信息。

x选项让ps没有控制终端的进程。这包括在启动时在后台运行的进程,例如服务。

ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.8  77616  8604 ?        Ss   19:47   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    19:47   0:00 [kthreadd]
...

ps aux命令将显示11个的列的信息USERPID%CPU%MEMVSZRSSSTATSTARTTTYTIMECMD

我们已经解释PIDTTYTIMECMD列。这是其他标签列的说明,USER运行进程的用户。

%CPU进程的cpu利用率。%MEM进程的驻留空间大小占计算机物理内存的百分比。

VSZ进程的虚拟内存大小,以KiB作为单位。RSS进程正在使用的物理内存的大小。

STAT进程状态代码,可以是Z僵尸进程,S正在休眠进程,R正在运行进程等。START命令开始的时间。

要打印进程树,请添加f选项。这将指示ps命令显示父进程到子进程的树视图。例如命令ps auxf将会打印进程树视图。

ps命令还允许您对输出进行排序。例如,要根据内存使用情况对输出进行排序,则可以运行命令ps aux --sort=-%mem

ps auxf
ps aux --sort=-%mem

PS命令UNIX风格

ps -ef命令是Unix风格最常使用的命令,e选项指示ps列出所有进程。f列出进程的详细信息。

ps -ef命令将显示8列的信息包括UIDPIDPPIDCSTIMETIMECMD

UID与BSD风格的PS命令的USER列相同,表示运行进程的用户。PPID父进程的ID。

C与相同%CPU列相同,表示进程的cpu利用率。STIMESTART列相同,表示命令启动的时间。

要仅查看以指定用户运行的进程,请运行命令ps -f -U myfreax -u myfreax,其中myfreax用户名。

ps -ef
ps -f -U myfreax -u myfreax
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 19:47 ?        00:00:01 /sbin/init
root         2     0  0 19:47 ?        00:00:00 [kthreadd]
...

打印指定列

如果你需要太多列的进程信息,可以使用o选项,后跟要打印的列名,ps命令将会仅展示你指定的列名。

例如要仅打印PIDCOMMAND的信息。您将运行unix风格的命令ps -efo pid,comm。或者BSD风格的命令ps auxo pid,comm

ps -efo pid,comm #UNIX
ps auxo pid,comm #BSD

PS命令与管道

ps可以通过命令与其它命令组合使用。如果你分页显示ps命令的信息,则可以通过管道符|,传递给less命令,以达到分页的查看目的。

ps命令的输出也可以通过管道|传递给grep进行过滤。比如仅展示root用户的进程。

ps -ef | less
ps -ef | grep root

结论

对Linux问题进行故障排除时,ps命令是最常用的命令之一。它有很多选项,通常大多数用户都使用ps auxps -ef来收集正在运行的进程的信息。

个人建议使用BSD风格,简单且已读。要查看所有可用ps选项的信息,请在终端中输入man ps。如果您有任何问题或反馈,请随时发表评论。