在Linux 程序的运行实例称为进程。有时在Linux工作时,您可能需要找出当前正在运行的进程。
您可以使用许多命令来查找正在运行进程的信息,ps
与top
也是最常用的命令。
在教程中,我们将讨论如何在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
四列分别标记PID
,TTY
,TIME
和CMD
。PID
是进程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个的列的信息USER
,PID
,%CPU
,%MEM
,VSZ
,RSS
,STAT
,START
,TTY
,TIME
和CMD
。
我们已经解释PID
,TTY
,TIME
和CMD
列。这是其他标签列的说明,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列的信息包括UID
,PID
,PPID
,C
,STIME
,TIME
和CMD
。
UID
与BSD风格的PS命令的USER
列相同,表示运行进程的用户。PPID
父进程的ID。
C
与相同%CPU
列相同,表示进程的cpu利用率。STIME
与START
列相同,表示命令启动的时间。
要仅查看以指定用户运行的进程,请运行命令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
命令将会仅展示你指定的列名。
例如要仅打印PID
,COMMAND
的信息。您将运行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 aux
或ps -ef
来收集正在运行的进程的信息。
个人建议使用BSD风格,简单且已读。要查看所有可用ps
选项的信息,请在终端中输入man ps
。如果您有任何问题或反馈,请随时发表评论。