top 命令是 Linux 系统下常用的系统监控工具,通过 top 命令我们可以获取到系统动态运行的信息,包括内存使用情况,系统负载情况,进程的运行情况等等。它有点类似于Windows系统下的任务管理器。
top -hv|-bcEHiOSs1 -d secs -n max -u|U user -p pid -o fld -w [cols]参数说明:
-d secs指定进程列表的刷新速度,单位秒。
- 示例:
top -d 5(每隔五秒刷新一次进程列表)
-n max指定进程列表的刷新次数,到达指定次数后 top 退出。
- 示例:
top -n 3(在刷新3次进程列表后退出)
-u user只显示指定用户启动的进程
- 示例:
top -u root(只显示以root用户启动的进程)
-p pid只显示指定pid的进程信息
- 示例:
top -p 1(只显示PID=1的进程)
-o fld指定使用那一列来对进程进行排序,默认以CPU负载情况倒序排序
- 示例:
top -o -PID(使用 PID 字段降序排序)
-b以批处理的模式打印数据。
- 示例:
top -b 
-
-i不显示任何闲置 (idle) 或无用 (zombie) 的进程
对-b批处理模式的进一步描述
top 命令的批处理模式(Batch-mode)可以区别于正常使用的交互模式(Interactive-mode),在批处理模式下top 只会不断打印系统状态,无法接受其他交互模式下的命令。这种状态有点类似于 ping命令,如果配合-n 选项指定刷新次数的话就更像了,我们可以通过批处理模式将系统状态不断打印到日志中,实现实时监控的效果。
交互模式(Interactive-mode)
在上面我们提到了一个交互模式的概念,其实正常输入 top 命令不带任何参数进入的一个terminal 界面就是了。我们在这个模式下可以通过交互命令(Interactive Command)实现一些更加高级的操作,同时上面的top选项也可以在交互模式下通过交互命令实现配置。
如 -d secs 用来指定进程列表的刷新进度,在交互模式下我们可以使用s命令进行配置。

获取交互命令的帮助h
我们可以输入h命令获取交互模式的命令帮助。

e 切换内存使用量的显示单位
通过e命令可以帮助我们切换内存大小的显示单位,从默认的字节为单位到 PB。

m 切换内存使用量的显示样式
通过m命令可以切换内存的显示样式,默认情况先会以数字展示,通过m命令可以切换为进度条样式显示百分比。

n 设置进程的显示数量

b 高亮排序列
H 显示线程
通过 top 命令可以获取到进程中对应的线程状态,我们可以使用 H 命令切换到线程视图。
i 切换是否显示空闲进程
默认显示。切换后对当前没有使用一点 CPU 时间的进程将不会被显示出来。top 命令会以上次该选项的状态作为默认选项,也就是如果在上一次是否有用 i 命令筛选非空闲进程,如果有的话则以上一次的状态为准来显示本次 top命令的进程。
k 结束指定进程
通过该命令可以指定一个 PID 并且项该进程发送指定的信号(默认为 15(SIGTERM)),这个命令类似于 kill -15 <pid>,但是是在 top 中执行的。

V 命令显示进程的树状结构
v 命令隐藏进程的子节点
这个命令一般与大 V 命令配合,在树视图下,可以通过 v 实现节点的折叠
F 命令指定字段过滤
在输入 F 命令后会出现一个界面,用于对显示列和排序列进行配置:

使用方向键 Up/Down 进行上下移动
使用右方向键选定字段然后 Up/Down 拖动对字段顺序进行排序
使用左方向键退出选定字段
d 或者空格键来确定是否显示当前字段
s 来设置当前字段
q 或者 退出配置
o 命令执行过滤
top 命令支持使用过滤器实现对目标进程的过滤,我们可以自定义过滤器进行过滤。
使用
o命令实现的过滤器是对数据忽略大小写的 使用O命令实现的过滤器对大小写敏感
使用 Ctrl+o 显示当前生效的过滤器。
使用 =重置当前窗口的过滤器
使用 +重置全部窗口的过滤器
使用 o 命令,然后输入过滤条件 PID>100,点击回车使其生效。
过滤器
这里我们来讲一下过滤器的表达式语法,如上述的 PID>100所表示的是 PID大于 100,的进程。
而对于top 中支持的过滤器完整的表达式格式如下:
<!> <字段名称> <操作符> <包含值/排除值>当过滤器以 ! 开始时,表示排除符合后面过滤器进程。
# 过滤满足 PID <= 100 的进程
!PID>100
# 过滤满足 PID>104 的进程
PID>104
# 过滤满足 COMMAND=init (COMMAND中包含init)的进程
COMMAND=init
top命令支持>,<,=这三类操作符。
其中=运算符只要求部分匹配,因此当我们需要查找某个命令启动的进程时,不需要输入全部命令,只需要输入部分命令即可。

对于 top 命令是支持精确匹配的,需要在<包含值/排查值>左右添加单引号如:
COMMAND='init'而>,<预算符在运算过程中对于数字列,也会将数字作为字符串进行判断大小,即比较方式为字典序。
在通过
J,j在调整列的对齐方式时,也有可能导致过滤器失效(影响到字典序的排序),需要注意。亦或者通过
e在调整内存的计量单位时,对相关列上使用FILTER进行过滤也存在过滤结果与预期不符,如在字符串比较下FILTER会认为100.0m(MiB) 大于1.000g(GiB)。
c 是否显示完整命令
通过 c 可以切换COMMAND列是否显示完整的命令,默认是指显示进程的名称,使用该命令可以获取到命令行
J,j调整进程列表的对齐方式

J 可以切换对数字列的对齐方式(默认右对齐),如果数字长度超出该列长度,则该调整有可能影响表头的对齐。j 可以切换字符串列的对齐方式,如果字符串长度超出该列长度,则该调整有可能影响表头的对齐。
滚动窗口
在top 的交互模式下,我们可以通过方向键 Left,Right,Up,Down来实现对窗口的上下左右移动,同时分页的 PageUp,PageDown也是可以使用的。
参考资料
Linux top命令

















