Linux 进程管理:ps 命令(查看进程)
在 Linux 系统中,运行一个程序实例被称为进程(process)。当在 Linux 操作系统下,我们常常需要知道系统中正运行着哪些进程。
有许多方法或命令可以找出系统中运行进程的信息,其中 ps
,pstree
和 top
命令是最通常的命令。
本文详细讲解如何使用 ps
命令列出运行中的进程并显示它们的相关信息。
ps 命令使用指南
ps
命令的一般语法展示如下:
ps [OPTIONS] # ps [命令选项]
由于历史发展及兼容性要求的原因,ps
命令接受以下所示各种类的命令选项方式:
- UNIX 风格的命令选项方式,每个选项由一个字符及前导单横杠符(-)表示
- BSD 风格命令选项方式,与 UNIX 相似,没有前导单横杠符。
- GNU 风格命令选项方式,俗称长命令选项表示,前导双横杠符(--)后跟单词。
不同类型的命令选项方式可以混用,但在一些特殊情况可能会产生冲突,因此,最好坚持使用一种类型的命令选项方式。
BSD 和 UNIX 命令选项方式可组合在一起。
ps
命令的最简单的形式,不带任何命令选项调用。ps
命令将显示4列信息,也只显示最少的进程信息,仅在当前外壳程序(shell)环境中调用的命令的进程。见如下展示:
$ ps
输出只显示出 bash
外壳程序本身和 ps
(刚刚调用的程序 ps )进程的信息。屏幕输出如下:
PID TTY TIME CMD
1809 pts/0 00:00:00 bash
2043 pts/0 00:00:00 ps
4 列信息的标题分别为 PID ,TTY,TIME 和 CMD 。
- PID - 进程ID(Process ID) 这可能是运行
ps
类进程查看命令最想得到的信息。因为通过它可以使用kill
类命令来强制关闭进程(常常是故障进程)。 - TTY - 进程相关的控制终端进程的名称。
- TIME - 进程累积消耗 CPU 的时间,显示单位为分钟和秒数。
- CMD - 运行进程的原始调用程序或命令的名称。
以上输出信息太少,常常没什么用。真正的 ps
命令的强大能力在接下来讲解的各命令选项的运用中才可充分体现。
ps
命令可接受大量的、多变的数字或命令选项用于显示出指定的一个或一组进程的各种相关信息。但是也只有少数的、方便的命令选项会在日常的维护任务中被使用到。
ps
命令最常使用如下命令选项的组合:
BSD 形式:
$ ps aux
a
选项意思是ps
命令显示 所有(all) 用户的进程。除了与终端无关及组进程不会被显示。u
选项表示使用人类易读的方式或格式显示进程详细信息。x
选项指示ps
命令显示出那些没有控制终端的进程。这些进程主要是在系统启动时就运行的进程和一些 后台程序 。
命令显示信息被分成7列,其标题分别是 USER , PID , %CPU , %MEM , VSZ , RSS , STAT , START , TTY , TIME 和 CMD 。
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]
...
...
之前已解释了 PID,TTY,TIME 和 CMD 的含义,下面是其它的列标题解释:
- USER - 启动执行进程的用户名。
- %CPU - 进程使用对 cpu 的使用率。
- %MEM - 进程驻留使用物理内存的百分比。
- VSZ - 进程的虚拟内存使用量,单位 KiB。
- RSS - 进程物理内存使用量。
- STAT - 进程运行状况码,诸如:Z(zombie),S(sleeping) 和 R(running) 等。,
- START - 进程开始运行的时间。
命令选项 f
指示 ps
命令显示进程的子进程树:
$ ps auxf
命令 ps
也可排序输出。例如,根据进程内存使用量排序进程输出,如下命令:
$ ps aux --sort=-%mem
UNIX 形式:
$ ps -ef
- 选项
-e
使 ps 命令显示所有进程。 - 选项
-f
意味全格式输出列表,意思显示进程详细信息。
如上命令会以8列列表显示进程信息。列标题 UID, PID, PPID, C, STIME, TIME, 和 CMD 。
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]
...
...
那些没解释过的标题解释如下:
- UID - 与 USER 相同,运行进程的用户名。
- PPID - 父进程 ID。
- C - 与 %CPU 相同,进程的 CPU 使用率。
- STIME - 与 START 相同,进程启动时时间。
仅查看某个用户启动的进程,使用下面的命令(这里 linuxize 是某个用户名):
$ ps -f -U linuxize -u linuxize
用户自定义输出
选项 o
允许用户自定义输出,指定输出哪些列。
例如,只显示输出 PID 和 COMMAND 列内容,可以如下命令:
$ ps -efo pid,comm
或
$ ps auxo pid,comm
ps 命令与其它命令配合使用
命令 ps
可通过管道与其它命令配合使用。
如果想使 ps
命令的输出分页,可将其输出管道给 less
命令:
$ ps -ef | less
命令 ps
的输出可通过 grep
进行过滤。例如,仅显示由 root 用户启动的进程,命令如下:
$ ps -ef | grep root
结语
命令 ps
是系统排障时最常用的。它有许多命令选项。但是,大多数用户常常只需使用 ps aux
或 ps -ef
命令获取收集运行进程的相关信息。
获取 ps
命令的更多帮助信息,在命令行终端键入 man ps
命令。
推荐文章: