12.1 查看当前正在运行的所有进程

ps aux

每当正在运行的某个程序发生死锁,并停止响应时,你就得手工关闭它;或者,你可能想知道某个用户正在运行什么程序;又或者,你只可能想知道自己的计算机上当前正在运行的进程的一些情况。对于上述这些情况,以及其他很多情况,解决的方法就是使用ps命令列出计算机上当前打开的进程。

遗憾的是,ps命令有很多版本,它们各自的选项种类也各不相同。甚至根据是否在这些选项前面加了连字符(-),它们的含意也各不相同,例如u-u就代表完全不同的两件事。到目前为止,本书都非常严格地在所有选项前面加了连字符(-),但是对于ps命令,为了让操作更加容易和统一,它的选项就不要求使用连字符。

要查看系统中用户正在运行的所有进程,可以在ps命令后面使用以下选项:a(表示所有用户)、u(以面向用户的格式显示,或显示拥有每个进程的用户)、x(没有控制tty①或终端屏幕的进程,“显示每个进程”的另一种方法)。预先提示一下,屏幕上将会飞驰而过相当长的列表内容: 这台计算机上会显示132行。

① tty通常用于指各种类型的终端设备。——译者注

  1. $ ps aux
  2. USER PID %CPU %MEM VSZ RSS TTY STAT START
  3. TIME COMMAND
  4. scott 24224 4.1 4.2 1150440 44036 ? R 11:02
  5. 12:03 /home/scott/.cxoffice/bin/wine-preloader
  6. scott 5594 0.0 0.1 3432 1820 pts/6 S+ 12:14
  7. 0:00 ssh scott@humbug.machine.com
  8. scott 14957 0.3 7.5 171144 78628 ? Sl 13:01
  9. 0:35 /usr/lib/openoffice2/program/soffice.bin
  10. ➥-writer
  11. scott 12369 0.0 0.0 0 0 ? Z 15:43
  12. 0:00 [wine-preloader] <defunct>
  13. scott 14680 0.0 0.1 3860 1044 pts/5 R+ 15:55
  14. 0:00 ps aux

ps命令能提供很多信息,包括进程的拥有者、唯一的进程ID编号(PID,用于标识进程)、进程正在使用的CPU百分比(%CPU)和内存百分比(%MEM)、进程的当前状态(STAT)及进程的名称。

STAT列用不同的字母表示进程的状态,最重要的一些状态如表12-1所示。 表 12-1

STAT 字母 含  义
R 运行(running)
S 休眠(sleeping)
T 停止(stopped)
Z 僵尸②(zombie)

② 表示该进程已经终止,但其父进程却无法正常终止它,造成“僵尸”进程的状态。——译者注

Z是个坏消息,因为它意味着进程基本上一直处于挂起状态,不能停止(幸运的是,这并不意味着没有解决问题的办法)。如果某个程序有问题,ps标明其状态为Z,这时或许只有重启计算机才能完全关闭这个程序。

因为ps aux提供了很多数据,所以要找到正在搜索的那个程序可能有点难。

ps aux的输出通过管道传递给grep,这是一种对特定命令的结果进行限制的简单方法。

  1. $ ps aux | grep [f]irefox
  2. scott 25205 0.0 0.0 4336 8 ? S
  3. Feb08 0:00 /bin/sh /opt/firefox/firefox
  4. scott 25213 1.1 10.9 189092 113272 ? Rl
  5. Feb08 29:42 /opt/firefox/firefox-bin

现在知道了正在计算机上运行的Firefox实例,包括谁在运行这个程序、加载这个程序占用了计算机的多少资源,以及这个程序已经运行了多长时间。多么有用的信息!

提示 为什么搜索的是[f]irefox,而不是firefox呢?可以在9.11节找到答案。