# 查看进程<a name="ZH-CN_TOPIC_0182317348"></a>

Linux是一个多任务系统，经常需要对这些进程进行一些调配和管理。要进行管理，首先就要知道现在的进程情况：有哪些进程、进程的状态如何等。Linux提供了多种命令来了解进程的状况。

## who命令<a name="zh-cn_topic_0151921029_s1e3a2f0d836b42218399646e796cc628"></a>

who命令主要用于查看当前系统中的用户情况。如果用户想和其他用户建立即时通讯，比如使用talk命令，那么首先要确定的就是该用户确实在线上，不然talk进程就无法建立起来。又如，系统管理员希望监视每个登录的用户此时此刻的所作所为，也要使用who命令。who命令应用起来非常简单，可以比较准确地掌握用户的情况，所以使用非常广泛。

例如查看系统中的用户及其状态。使用如下：

```
# who
admin     tty1         Jul 28 15:55
admin     pts/0        Aug  5 15:46 (192.168.0.110)
admin     pts/2        Jul 29 19:52 (192.168.0.110)
root     pts/3        Jul 30 12:07 (192.168.0.110)
root     pts/4        Jul 31 10:29 (192.168.0.144)
root     pts/5        Jul 31 14:52 (192.168.0.11)
root     pts/6        Aug  6 10:12 (192.168.0.234)
root     pts/8        Aug  6 11:34 (192.168.0.234)
```

## ps命令<a name="zh-cn_topic_0151921029_s65e09339f256449a816da11e07351009"></a>

ps命令是最基本又非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等，大部分进程信息都是可以通过执行该命令得到的。

ps命令最常用的还是用来监控后台进程的工作情况，因为后台进程是不与屏幕、键盘这些标准输入/输出设备进行通信的，所以如果需要检测其状况，就可使用ps命令。ps命令的常见选项如[表1](#zh-cn_topic_0151921029_t34619d964a3d41ad8694189ec383359c)所示。

**表 1**  选项说明

<a name="zh-cn_topic_0151921029_t34619d964a3d41ad8694189ec383359c"></a>
<table><thead align="left"><tr id="zh-cn_topic_0151921029_r79d809c7e44245b1bbf90aac5b57cb16"><th class="cellrowborder" valign="top" width="18.61%" id="mcps1.2.3.1.1"><p id="zh-cn_topic_0151921029_a4dcafe9758654440a1cd09443b49b996"><a name="zh-cn_topic_0151921029_a4dcafe9758654440a1cd09443b49b996"></a><a name="zh-cn_topic_0151921029_a4dcafe9758654440a1cd09443b49b996"></a>选项</p>
</th>
<th class="cellrowborder" valign="top" width="81.39%" id="mcps1.2.3.1.2"><p id="zh-cn_topic_0151921029_ac6fdbea1258d4c3ca520255a2d2fe663"><a name="zh-cn_topic_0151921029_ac6fdbea1258d4c3ca520255a2d2fe663"></a><a name="zh-cn_topic_0151921029_ac6fdbea1258d4c3ca520255a2d2fe663"></a>描述</p>
</th>
</tr>
</thead>
<tbody><tr id="zh-cn_topic_0151921029_r738b90e22f614e77b9ea21359ad14755"><td class="cellrowborder" valign="top" width="18.61%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0151921029_a29392e63172746c491bc46c8b76b0080"><a name="zh-cn_topic_0151921029_a29392e63172746c491bc46c8b76b0080"></a><a name="zh-cn_topic_0151921029_a29392e63172746c491bc46c8b76b0080"></a>-e</p>
</td>
<td class="cellrowborder" valign="top" width="81.39%" headers="mcps1.2.3.1.2 "><p id="zh-cn_topic_0151921029_a512f7ef0b90a4cb7bf17fa20f4775725"><a name="zh-cn_topic_0151921029_a512f7ef0b90a4cb7bf17fa20f4775725"></a><a name="zh-cn_topic_0151921029_a512f7ef0b90a4cb7bf17fa20f4775725"></a>显示所有进程。</p>
</td>
</tr>
<tr id="zh-cn_topic_0151921029_r015cec7c7ac44cbca03a8af4cd753492"><td class="cellrowborder" valign="top" width="18.61%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0151921029_a068031d192014fe8a886ae267635afde"><a name="zh-cn_topic_0151921029_a068031d192014fe8a886ae267635afde"></a><a name="zh-cn_topic_0151921029_a068031d192014fe8a886ae267635afde"></a>-f</p>
</td>
<td class="cellrowborder" valign="top" width="81.39%" headers="mcps1.2.3.1.2 "><p id="zh-cn_topic_0151921029_a474a7023a5fd41258427e511f0b4d79c"><a name="zh-cn_topic_0151921029_a474a7023a5fd41258427e511f0b4d79c"></a><a name="zh-cn_topic_0151921029_a474a7023a5fd41258427e511f0b4d79c"></a>全格式。</p>
</td>
</tr>
<tr id="zh-cn_topic_0151921029_rec7c0b7251f743e4b6d3d41dc44c7e9f"><td class="cellrowborder" valign="top" width="18.61%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0151921029_af814f2f50cc44408999eb08d9d0a2a2a"><a name="zh-cn_topic_0151921029_af814f2f50cc44408999eb08d9d0a2a2a"></a><a name="zh-cn_topic_0151921029_af814f2f50cc44408999eb08d9d0a2a2a"></a>-h</p>
</td>
<td class="cellrowborder" valign="top" width="81.39%" headers="mcps1.2.3.1.2 "><p id="zh-cn_topic_0151921029_ab4f39caa92d54d2ea6b3c093e55d618e"><a name="zh-cn_topic_0151921029_ab4f39caa92d54d2ea6b3c093e55d618e"></a><a name="zh-cn_topic_0151921029_ab4f39caa92d54d2ea6b3c093e55d618e"></a>不显示标题。</p>
</td>
</tr>
<tr id="zh-cn_topic_0151921029_r38d5c83acc40447abba5cca0c4386932"><td class="cellrowborder" valign="top" width="18.61%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0151921029_a2a631b086f1942b6b81eafb5dbabdcd0"><a name="zh-cn_topic_0151921029_a2a631b086f1942b6b81eafb5dbabdcd0"></a><a name="zh-cn_topic_0151921029_a2a631b086f1942b6b81eafb5dbabdcd0"></a>-l</p>
</td>
<td class="cellrowborder" valign="top" width="81.39%" headers="mcps1.2.3.1.2 "><p id="zh-cn_topic_0151921029_a09dc585737284fad909909e50c803bc2"><a name="zh-cn_topic_0151921029_a09dc585737284fad909909e50c803bc2"></a><a name="zh-cn_topic_0151921029_a09dc585737284fad909909e50c803bc2"></a>使用长格式。</p>
</td>
</tr>
<tr id="zh-cn_topic_0151921029_r2e38bfe71fa94287ac2147781f1a53c1"><td class="cellrowborder" valign="top" width="18.61%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0151921029_a188698ebfa154b02a7841a551ab484da"><a name="zh-cn_topic_0151921029_a188698ebfa154b02a7841a551ab484da"></a><a name="zh-cn_topic_0151921029_a188698ebfa154b02a7841a551ab484da"></a>-w</p>
</td>
<td class="cellrowborder" valign="top" width="81.39%" headers="mcps1.2.3.1.2 "><p id="zh-cn_topic_0151921029_ab88d108c1ce744cdb50047050bc0cd9b"><a name="zh-cn_topic_0151921029_ab88d108c1ce744cdb50047050bc0cd9b"></a><a name="zh-cn_topic_0151921029_ab88d108c1ce744cdb50047050bc0cd9b"></a>宽行输出。</p>
</td>
</tr>
<tr id="zh-cn_topic_0151921029_r84c7a5f140c44fb598620f34927af667"><td class="cellrowborder" valign="top" width="18.61%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0151921029_a811383eb9caa4ad583b1e5de91ea5dd4"><a name="zh-cn_topic_0151921029_a811383eb9caa4ad583b1e5de91ea5dd4"></a><a name="zh-cn_topic_0151921029_a811383eb9caa4ad583b1e5de91ea5dd4"></a>-a</p>
</td>
<td class="cellrowborder" valign="top" width="81.39%" headers="mcps1.2.3.1.2 "><p id="zh-cn_topic_0151921029_aa07844184ac64000a161e1c1291675e3"><a name="zh-cn_topic_0151921029_aa07844184ac64000a161e1c1291675e3"></a><a name="zh-cn_topic_0151921029_aa07844184ac64000a161e1c1291675e3"></a>显示终端上的所有进程，包括其他用户的进程。</p>
</td>
</tr>
<tr id="zh-cn_topic_0151921029_rd13fe771cf744239858d51db76b25f8e"><td class="cellrowborder" valign="top" width="18.61%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0151921029_ab886c758505744f4b37c512bde114ae3"><a name="zh-cn_topic_0151921029_ab886c758505744f4b37c512bde114ae3"></a><a name="zh-cn_topic_0151921029_ab886c758505744f4b37c512bde114ae3"></a>-r</p>
</td>
<td class="cellrowborder" valign="top" width="81.39%" headers="mcps1.2.3.1.2 "><p id="zh-cn_topic_0151921029_abc98313b7c914539adb9532d56c037d3"><a name="zh-cn_topic_0151921029_abc98313b7c914539adb9532d56c037d3"></a><a name="zh-cn_topic_0151921029_abc98313b7c914539adb9532d56c037d3"></a>只显示正在运行的进程。</p>
</td>
</tr>
<tr id="zh-cn_topic_0151921029_rcb3959cc0c6e4110b87f7409841b01b1"><td class="cellrowborder" valign="top" width="18.61%" headers="mcps1.2.3.1.1 "><p id="zh-cn_topic_0151921029_a0fd38f1f80de4840aaa00e63119a82a8"><a name="zh-cn_topic_0151921029_a0fd38f1f80de4840aaa00e63119a82a8"></a><a name="zh-cn_topic_0151921029_a0fd38f1f80de4840aaa00e63119a82a8"></a>-x</p>
</td>
<td class="cellrowborder" valign="top" width="81.39%" headers="mcps1.2.3.1.2 "><p id="zh-cn_topic_0151921029_aa7d202094de346738f7e3ad4735f2bce"><a name="zh-cn_topic_0151921029_aa7d202094de346738f7e3ad4735f2bce"></a><a name="zh-cn_topic_0151921029_aa7d202094de346738f7e3ad4735f2bce"></a>显示没有控制终端的进程。</p>
</td>
</tr>
</tbody>
</table>

例如显示系统中终端上的所有进行进程。命令如下：

```
# ps -a
  PID TTY          TIME CMD
12175 pts/6    00:00:00 bash
24526 pts/0    00:00:00 vsftpd
29478 pts/5    00:00:00 ps
32461 pts/0    1-01:58:33 sh
```

## top命令<a name="zh-cn_topic_0151921029_s52818e4ff14d465bac3ef247773998f8"></a>

top命令和ps命令的基本作用是相同的，显示系统当前的进程和其他状况，但是top是一个动态显示过程，即可以通过用户按键来不断刷新进程的当前状态，如果在前台执行该命令，它将独占前台，直到用户终止该程序为止。其实top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU的任务列表。该命令可以按CPU使用、内存使用和执行时间对任务进行排序，而且该命令的很多特性都可以通过交互式命令或者在定制文件中进行设定。

top命令输出的实例如[图1](#zh-cn_topic_0151921029_f289234fcdbac453796200d80e9889cd1)所示：

**图 1**  top显示<a name="zh-cn_topic_0151921029_f289234fcdbac453796200d80e9889cd1"></a>  
![](figures/top显示.png "top显示")

## kill命令<a name="zh-cn_topic_0151921029_s0b0a419b753e4ad2ad2ff4ce2fd5b4f2"></a>

当需要中断一个前台进程的时候，通常足使用“Ctrl+c”组合键，而对于后台进程不能用组合键来终止，这时就可以使用kill命令。该命令可以终止前台和后台进程。终止后台进程的原因包括：该进程占用CPU的时间过多、该进程已经死锁等。

kill命令是通过向进程发送指定的信号来结束进程的。如果没有指定发送的信号，那么默认值为TERM信号。TERM信号将终止所有不能捕获该信号的进程。至于那些可以捕获该信号的进程可能就需要使用KILL信号（它的编号为9），而该信号不能被捕捉。

kill命令的浯法格式有以下两种方式：

```
kill [-s 信号 | -p] [-a] 进程号…
kill -l [信号]
```

其中进程号可以通过ps命令的输出得到。-s选项是给程序发送指定的信号，详细的信号可以用“kill -l”命令查看；-p选项只显示指定进程的ID号。

杀死pid为1409的进程，示例如下：

```
# kill -9 1409
```

显示所有的信号及其编号对应关系，示例如下：

```
# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
```

