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'

>,<预算符在运算过程中对于数字列,也会将数字作为字符串进行判断大小,即比较方式为字典序。

在通过 Jj在调整列的对齐方式时,也有可能导致过滤器失效(影响到字典序的排序),需要注意。

亦或者通过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命令

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐