工作在 Linux 命令行下,会有想查看系统进程相关状况的时候,诸如,各进程占用 CPU 或查看哪个进程占用内存最多等需要。 好的,有一个被称为顶级(top) 的命令能满足你,而且它使用简单。本教程中,我们使用一些简单例子讲解这个命令。
讲解之前,必须一提的是本文所有的例子都在 Ubuntu 16.04 LTS 系统上运行通过。
Linux top 命令
命令 top 显示当前系统内核中进程和线程的一个信息列表,下面是其命令语法:
top [命令选项]
跟随以下类似 Q&A(问与答)方式的例子,我们更容易掌握 top 命令的运用。
问题1. top 如何使用?
简单地,不带任何命令选项键入 top 命令:
$ top
下面是我系统上的输出:
注意到我的截图只是实时输出的快照(屏幕输出以固定的时间间隔在变化)。
问题2. 如何看明白 top 命令的屏幕输出?
先看屏幕输出最上面第一行。它按顺序输出以下信息 -- 当前时间,系统启动运行时长,活动用户会话数,系统平均负载(最近1分钟,5分钟,15分钟时间内平均统计值)。
第二行按顺序输出 -- 进程总数 ,运行进程数 ,休眠进程数 ,停止进程数 ,僵尸进程数 。
第三行包含 CPU 占用时间百分比信息。详细信息如下:
us, user : 未调优先级(un-niced)的用户进程时间占比
sy, system : 系统内核进程时间占比
ni, nice : 调优先级(niced)的用户进程时间占比
id, idle : 内核空闲时间占比
wa, IO-wait : 用于系统 输入/输出 等待时间占比
hi : 硬件中断(hardware interrupts)消费时间占比
si : 软件中断(software interrupts)消费时间占比
st : 虚拟管理子系统消耗(stolen)时间占比
接着的两行,显示的是内存和交换内存使用情况信息。最后,是每个进程的相关信息,有数列信息,按顺序列标题含义 -- PID (进程 ID -- process ID) ,USER(进程所属用户) , PR (进程优先级数 -- priority ) ,NI(进程优先参数 -- nice value) , VIRT (虚拟内存占用 -- virtual) ,RES(物理内存占用 -- physical resource) , SHR (共享内存占用 -- shared memory) ,S(进程状态 -- status) ,%CPU (CPU 占比) ,%MEM(内存占比 -- RAM memory) , TIME+ (活动时长 -- time of activity) ,COMMAND(启动进程的命令 -- command) 。
问题3. 在 top 命令界面如何终止进程?
这很容易,只键入 ‘k’ 键,top 命令将会提示请求你输入想终止的 PID(进程 ID) 。你会在进程的列表头上方一行看到这个信息,例子中显示信息为 'PID to signal/kill [default pid = 3397]' ,中文含义: '信号\/终止发送到的 PID [默认 pid = 3397] ' 。如下截图所示:
如你所见,你可以输入一个进程 ID 或回车默认。top 将会终止(通过发送终端信号 SIGTERM )指定 PID 的进程。一旦信号发送,如下信息显示在屏幕上 -- 'Send pid 3007 signal [15/sigterm]' ,中文含义: '发送到 pid 3007 信号 [15/sigterm]' 。
问题4. 如何改变进程优先级?
类似 'k' 键去终止进程,可用 'r' 去改变进程优先级(改变进程优先级是通过优先级参数 -- nice -- 的值去改变 -- renice-- 操作 )。键入 'r' 键,屏幕显示如下信息:
PID to renice [default pid = 3397] #调优先级参数的 PID [默认 pid=3397]
输入一个 PID 或回车保持默认,示例中,我输入一个 PID 后,top 屏幕提示我输入优先级参数( nice) 值。
Renice PID 2665 to value #输入 PID 2665 调整的优先级参数值
输入一个数值(范围 -20~19)并回车,你会看到 PID 2665 的进程优先级参数(nice)值改变。
Q5. 如何更改 top 命令的刷新率?
默认情况下, top 每3秒刷新一次输出,但是您可以通过键入'd'进行调整。该命令将要求您输入新的延迟值:
将延迟从3.0更改为
只需输入值,然后按下 Enter 键。即可。
Q6. 如何限制 top 命令输出的用户
默认情况下, top 命令显示所有进程。但是,您可以通过键入'u'将输出限制为特定用户。
哪个用户 (空白代表全部)
只需在上面的行内输入用户名, 然后按下 Enter 键, 您将看到输出仅包含那些由您输入名称的用户所拥有的进程。
例如,我输入了'root',输出如下:
Q7. 如何使 top 命令显示完整的命令以及参数?
这可以通过键入 'c' 来完成。 例子如下:
这样您现在可以在输出中看到完整的命令路径以及命令行参数。
Q8. 如何获得交互式 top 命令的帮助?
要获得与交互式 top 命令有关的帮助, 请键入 'h' 。在输出中,您将看到可用的命令以及它们的作用。例如,这是当我按下 ' h' 时在系统上弹出的内容。
结论
我们在这仅仅摸到了点皮毛。top 命令提供了更多的功能。一旦您了解了我们在本文中讨论的所有内容并完成了实践, 请转到 top 的 手册页 以了解更多信息。