linux 命令:top 详解

 注:以下文档根据2019年10月的官方文档翻译。

名称:top - 展示linux进程信息

用法:top -hv|-bcEHiOSs1 -d secs -n max -u|U user -p pid -o fld -w [cols]

在top进程运行过程中,两个最重要的功能是查看帮助(h 或 ?)和退出(q 或 Ctrl+C)

top 展示界面由从上到下3部分组成,① 概览区域 ② 表头 ③ 任务区域,还有一个输入/消息行,位于概览区域和表头之间。

可以对任务区域进行滚动操作,包括上下左右等,下边是具体列表:

功能按键等效按键
键盘左方向键(Left)Alt + h
键盘下方向键(Down)Alt + j
键盘上方向键(Up)Alt + k
键盘右方向键(Right)Alt + l
最上键盘Home键Alt + Ctrl + h
下一页键盘PgDn键Alt + Ctrl + j
上一页键盘PgUp键Alt + Ctrl + k
最下键盘End键Alt + Ctrl + l

输入行的操作:

按键功能
Up显示上一条命令,可以继续编辑
Down显示下一条命令,或清空输入行
Insert在插入模式和覆盖模式之间切换
Delete删除光标处的字符,光标右侧的字符整体左移一位
Home移动到输入行的最左边
End移动到输入行的最右边

1. 命令行选项:

选项功能
-h/-v

帮助/版本

展示帮助文档和版本,之后退出

-b

批处理模式

使用批处理模式启动top,这种启动方式可以有效地把top的结果输出到程序或文件。在这种模式下,top不会接收输入,且根据-n设置的迭代次数执行完毕后或者主动杀掉进程才会使当前top进程终止。

-c

命令行/程序名切换

top开启后显示的是上一次使用'c'功能生效的效果的反面效果,如果上一次是命令行,这一次显示的就是程序名

-d

延迟时间间隔:-d ss.t(ss秒.10分之t)

设置屏幕刷新时间间隔,覆盖个人配置或开机默认配置。这个参数之后可以通过'd'或's'交互命令修改。分数形式是可接受的,但负数是不能接受的。但是上述修改在安全模式下是禁止的,除非使用root用户执行。

-E

扩展内存展示形式:-E k|m|g|t|p|e

设置内存单位:

k - kibibytes

m - mebibytes

g - gibibytes

t - tebibytes

p - pebibytes

e - exbibytes

这个值可以用'E'切换

-H

线程模式

展示独立线程。在不使用这个参数时,每个进程将展示所有线程的一个总值。这个值可以用'H'切换

-i

空闲进程切换

top开启后显示的是上一次使用'i'功能生效的效果的反面效果,当这个切换状态是'关闭'时,从上一次展示到现在没有使用任何CPU的任务不会被展示。

-n

迭代限制次数:-n 数字

设置最大迭代次数,在执行次数等于这个数字之后top退出。

-o

覆盖排序字段:-o 字段名

指定将对任务进行排序的字段的名称,与配置文件中反映的内容无关。你也可以在字段前加一个'+'或'-','+'的作用是降序,'-'是升序。

这个选项是支持自动/脚本化批处理模式的基础。

-O

输出字段名

这个选项作为上边'-o'的补充。会使top在不同的行打印每一个字段名,之后退出。这些字段名属于NLS(国家语言支持)翻译。

-p

监视进程ID模式:-pN1 -pN2 ... 或 -pN1,N2,N3 ...

只展示指定ID的进程。这个模式可以接受最多20个进程id,可以使用用逗号分隔的列表。

为0的进程id会被视为top本身的进程id。

这个模式只能是命令行模式,如果想切换到其他模式,应该退出然后重启top。

-p, -u, -U 不能同时使用。

-s

安全模式

强制使用安全模式启动top,即使是root用户。这个模式使用系统配置文件控制的更好。

-S

累计时间切换

top开启后显示的是上一次使用'S'功能生效的效果的反面效果,当它是开启时,展示每个进程和它们的被杀掉的子进程的cpu时间。

-u/-U

用户筛选模式:-u | -U 数字或名字

只展示用户id或用户名匹配给定参数的进程。'-u' 匹配有效用户,'-U' 匹配任何用户(真实的、有效的、已存的或文件系统)

在用户id或用户名前加上前缀'!','!'表示非。

-p, -u, -U 不能同时使用。

-w

输出宽度覆盖:-w [ 数字 ]

在批处理模式,如果没有参数,top会使用环境变量 COLUMNS= 和 LINES= 作为格式来输出。另外,宽度会固定为512列。列数可以通过参数配置为任意数值(不能大于512),但是行数没有限制。

在普通模式,如果没有参数,top会尝试使用环境变量 COLUMNS= 和 LINES= 作为格式来输出。列数可以通过参数配置而减少,不能增加。只要不是在批处理模式,终端的展示尺寸大小就不能延长。

提示:只要不使用这个命令行选项,top展示的尺寸只跟终端有关。

-1

总体/分别显示CPU状态切换

top开启后显示的是上一次使用CPU状态功能生效的效果的反面效果。或者是所有cpu信息在一行显示,或者是每一个cpu分别在独立的行显示。

2. 概览区域:

2.1 UPTIME(运行时间) 和 LOAD Averages(平均负载)

这一行信息包括:程序或窗口名称,当前服务器时间,自从上次启动服务器到现在的时间,当前登录用户数量,过去1、5、15分钟的系统平均负载。

2.2 TASK(任务) 和 CPU 状态

这部分包括至少两行信息。第一行展示任务(Tasks)或线程(Threads)的所有数量(total)、运行数量(running)、睡眠数量(sleeping)、被停止数量(stopped)、僵尸数量(zombie)。第二行展示上次刷新之后的间隔时间的CPU状态百分比。

默认情况下,下边这些信息将被展示:

显示名称功能
us未调整优先级的用户进程的运行cpu时间
sy内核进程的运行cpu时间
ni已调整优先级的用户进程的运行cpu时间
id内核空闲cpu时间
wa等待IO完成的cpu时间
hi硬件中断cpu时间
si软件中断cpu时间
st当前vm被hypervisor偷去的cpu时间

2.3 内存(MEMORY)使用

这部分包括两行信息,展示了内存使用情况,其中的单位默认为KiB(kibibytes),可以使用交互命令'E'切换单位,从KiB到EiB。

默认情况下,第一行展示物理内存,参数包括总和(total)、空闲(free)、已使用(used)和缓冲(buff/cache)。第二行展示虚拟内存,参数包括总和(total)、空闲(free)、已使用(used)和可用(avail)物理内存。

第二行的可用(avail)内存参数是启动应用时评估的可用的物理内存大小,不包括交换分区。与空闲(free)参数不同,它尝试去展现可回收的页缓存和内存板。

下边是KiB到EiB和bytes的单位转化:

KiB = kibibyte = 1024 bytes
MiB = mebibyte = 1024 KiB = 1,048,576 bytes
GiB = gibibyte = 1024 MiB = 1,073,741,824 bytes
TiB = tebibyte = 1024 GiB = 1,099,511,627,776 bytes
PiB = pebibyte = 1024 TiB = 1,125,899,906,842,624 bytes
EiB = exbibyte = 1024 PiB = 1,152,921,504,606,846,976 bytes

3. 字段/列:

3.1 字段的描述:

字段和列信息严格按照ascii字母表顺序排列。你可以通过交互命令'f'或'F'配置要显示哪些字段。任意字段都可以被选成可排序字段,你可以控制是升序排列还是降序排列。与物理内存或虚拟内存引用(KiB)相关的字段是无后缀显示模式。这些字段可能会使用从KiB到PiB为单位。单位可以用交互命令'e'切换。

1. %CPU -- CPU使用

自上次屏幕更新以来任务占用的CPU时间份额,表示为总CPU时间的百分比。

在真实的SMP环境中,如果一个进程是多线程的而top没有在线程模式,大于100%的数量会被展示。可以用交互命令'H'可以切换线程模式。

在多处理器环境中,如果Irix模式关闭,top会使用Solaris模式,在这个模式中,任务的cpu使用情况数据会展示被CPU总数进行除法操作后的值。使用交互命令'I'切换Irix/Solaris模式。

提示:在森林视图模式中,这个字段也可以展示平时看不到的子进程的CPU时间。(参考4.3的森林模式)

2. %MEM -- 内存使用(RES)

任务当前可用的物理内存共享。

3. CGNAME -- 控制组名称

一个进程从属的控制组名称,如果不存在,就显示'-'。这个参数会出现在CGROUPS的最后,这个字段也是宽度可变的。

4. CGROUPS -- 控制组

一个进程从属的(多个)控制组名称,如果不存在,就显示'-'。控制组是用来在进程安装预定义的组中分配资源(CPU、内存、网络带宽等)。它们实现了对这些资源的分配、拒绝、优先排序、管理和监控的细粒度控制。多个不同的等级会同时存在于一个系统中,每个等级附属于一个或多个子系统。一个子系统代表一个简单资源。

提示:CGROUPS字段,和其他大多数字段不同,是可变宽度的。展示的时候,屏幕剩下的宽度都可以分配给它。但还是有可能显示不全。

5. CODE -- 代码空间(KiB)

物理内存中用来执行代码的空间大小,也叫做文本常驻集(TRS)。

6. COMMAND -- 命令名或命令行

展示启动一个任务的命令行或关联的程序的名字。可以使用'c'切换。当使用命令行显示选项时,没有命令行的进程(比如内核线程)会展示包在中括号中的程序名。这个字段可能也会被森林模式影响展示效果,看上边3.11. %CPU -- CPU使用

提示:不像大多数字段,COMMAND是可变宽度的。展示的时候,屏幕剩下的宽度都可以分配给它。但还是有可能显示不全,尤其是展示命令行的时候。

7. DATA -- 数据+栈 空间(KiB)

进程拥有的私有内存大小,也叫做数据常驻集(DRS)。这部分内存可能尚未被映射在物理内存(RES)中,但是总是被包括在虚拟内存(VIRT)中。

8. ENVIRON -- 环境变量

展示各进程的所有环境变量。这些环境变量以原始顺序排列,而不是使用'set'自定义的顺序。

提示:不像大多数字段,ENVIRON是可变宽度的。展示的时候,屏幕剩下的宽度都可以分配给它。但还是有可能显示不全。

9. Flags -- 任务标志

这一列代表任务当前的调度标志,这些标志是用16进制表示的,0不显示。这些标志可以在官方文档<linux/sched.h>中查到。

10. GID -- 组ID

有效的组ID。

11. GROUP -- 组名

有效的组名。

12. LXC -- lxc容器名

任务运行所在的lxc容器的名称。如果进程没有运行在容器,这个字段的值为'-'。

13. NI -- 优先级参数
任务的优先级。负数值意味着更高的优先级,正数意味着更低。0值意味着优先级在决定任务的调度能力是不会被调整。

14. NU -- 上一个NUMA节点

一个数字代表NUMA节点有关的上一个使用的处理器。-1代表无此信息。

15. OOMa -- 内存溢出调整机制

这个字段会被增加到当前内存溢出分数中,来决定什么任务会被杀掉,范围是-1000到+1000。

16. OOMs -- 内存溢出分数

这个字段是用来选择当内存耗尽时杀掉的任务,范围是0到+1000。0的意思是绝不杀掉,1000的意思是总是杀掉。

17. P -- 上一个使用的CPU(SMP)

代表上一个使用的处理器。在一个真实的SMP环境中,这个值可能会变化的很明显,因为内核故意使用弱亲和力。同时,运行top有可能打破这个弱亲和力,导致更多的进程更频繁地改变CPU使用情况(因为额外的cpu时间需求)。

18. PGRP -- 进程组ID

每个进程都是唯一进程组的成员,该进程组用于分配信号,并由终端对其输入和输出请求进行仲裁。创建(分支)流程时,它将成为其父级进程组的成员。按照惯例,该值等于进程组第一个成员(称为进程组组长)的流程ID(请参见PID)。

19. PID -- 进程ID

任务的唯一进程ID,它定期包装,但从不在零重新启动。在内核中,它是由任务结构定义的可调度实体。这个值可能也被用作:进程组ID;事务领导的事务ID;线程组领导的线程组ID;进程组领导的TTY进程组ID。

20. PPID -- 父进程ID

任务父进程的进程ID。

21. PR -- 优先级

任务调度优先级。如果你看到'rt',意味着这个任务是实时调度优先级。在linux中,实时优先级是有些误导性的,因为这个运行本身是不可预清空的。虽然内核版本2.6中可以大部分预清空,但不是总是这样。

22. RES -- 常驻内存大小(KiB)

虚拟地址空间 (VIRT) 的子集,表示任务当前使用的非交换物理内存。 它也是 RSan、RSfd 和 RSsh 字段的总和。它可以包括私有匿名页面、映射到文件(包括程序映像和共享库)的私有页面以及共享匿名页面。 所有这些内存都由 swap 下单独表示的交换文件支持。最后,该字段还可能包括共享文件支持的页面,这些页面在修改时充当专用交换文件,因此永远不会影响swap。

23. RSan -- 常驻匿名内存大小(KiB)

常驻内存(RES)的子集,表示没有映射到文件的私有页面。

24. RSfd -- 常驻备份文件内存大小(KiB)

常驻内存(RES)的子集,表示支持程序镜像和共享库的隐式共享页面。也包括私有或共享的显式文件映射。

25. RSlk -- 常驻锁定内存大小(KiB)

常驻内存(RES)的子集,不能被交换出去。

26. RSsh -- 常驻共享内存大小(KiB)

常驻内存(RES)的子集,表示显式共享的匿名shm*/mmap 页面。

27. RUID -- 真实用户ID

真实用户ID。

28. RUSER -- 真实用户名

真实用户名。

29. S -- 进程状态

任务的状态,可选值有:

D不可中断休眠
I空闲
R运行中
S休眠
T被任务控制信号停止
t在跟踪期间被调试器停止
Z僵尸

显示为运行的任务应该被认为是准备好了运行状态更合适。它们的任务结构是表示在了linux运行队列里。即使没有一个真实的SMP机器,你也可以根据top的延迟时间间隔和优先级数值在这个状态看到多个任务。

30. SHR -- 共享内存大小(KiB)

常驻内存(RES)的子集,可能被其他进程使用。包括共享匿名页面和共享备份文件页面。也包括映射到文件的私有页面,表示程序镜像和共享库。

31. SID -- 事务ID

事务是进程组的集合,总是由登录的shell建立起来。新分支的进程会加入到创造者的事务中。一般的,这个值等于事物的第一个成员的进程ID,也叫事务领导,通常是登录的shell。

32. SUID -- 保存的用户ID

保存的用户ID。

33. SUPGIDS -- 补充组ID

补充组的ID在登录时创建或从父任务继承。用逗号分隔。

提示:提示:不像大多数字段,SUPGIDS是可变宽度的。展示的时候,屏幕剩下的宽度都可以分配给它。但还是有可能显示不全。

34. SUPGRPS -- 补充组名称

补充组的名称在登录时创建或从父任务继承。用逗号分隔。

提示:提示:不像大多数字段,SUPGRPS是可变宽度的。展示的时候,屏幕剩下的宽度都可以分配给它。但还是有可能显示不全。

35. SUSER -- 保存的用户名

保存的用户名。

36. SWAP -- 交换的大小(KiB)

当物理内存过度提交时,任务地址空间的原先驻留部分写入交换文件。

37. TGID -- 线程组ID

任务的线程组ID。线程组领导的进程ID。在内核中,它表示共享mm_struct的任务。

38. TIME -- CPU时间

任务启动之后累计使用的CPU时间。使用'S'切换累计时间模式开启后,每个进程的cpu时间和被杀掉的子进程的cpu时间都会被列出来。(参考1. 命令行选项中的累计时间模式)

39. TIME+ -- CPU时间,精确到百分之一秒

跟TIME相同,但是粒度是百分之一秒。

40. TPGID -- tty 进程组ID

连接的tty的前台进程的进程组ID,如果一个进程没有连接到终端,值为-1。一般的,这个值等于进程组领导的进程ID。

41. TTY -- 控制 tty

控制终端的名字。总是进程启动所在的设备(串行端口、pty 等等)和用来进行输入输出的设备。但是任务不必和终端关联。

42. UID -- 用户ID

任务所有者的有效用户ID。

43. USED -- 在使用的内存(KiB)

任务使用的非交换的物理内存(RES)加上地址空间被交换出去的部分(SWAP)。

44. USER -- 用户名

任务所有者的有效用户名。

45. VIRT -- 虚拟内存大小(KiB)

任务使用的虚拟内存大小。包括所有代码,数据和共享库加上被交换出去的页面和被映射但没被使用的页面。

46. WCHAN -- 函数中休眠

展示正在休眠的内核函数。运行中的任务将展示为'-'。

47. nDRT -- 脏页面计数

自上次写入辅助存储以来已修改的页数。在对应的物理内存地址可以被用在其他虚拟页面之前,脏页面必须被写入辅助存储。这个字段在linux 2.6 被废弃,总是0。

48. nMaj -- 主要页面错误计数

任务的主要页面错误计数。页面错误发生在进程尝试去读或写一个在地址空间不存在的虚拟页面时。主要页面错误是指在使该页面可用时涉及辅助存储访问。

49. nMin -- 次要页面错误计数

任务的次要页面错误计数。页面错误发生在进程尝试去读或写一个在地址空间不存在的虚拟页面时。次要页面错误是指在使该页面可用时不涉及辅助存储访问。

50. nTH -- 线程数

进程的线程数。

51. nsIPC -- IPC 命名空间

这个命名空间的Inode是用来隔离进程间通信(IPC)资源,比如System V IPC 对象和 POSIX 消息队列。

52. nsMNT -- MNT 命名空间

这个命名空间的Inode是用来隔离文件系统挂载点,因此提供了不同的文件系统等级的视图。

53. nsNET -- NET 命名空间

这个命名空间的Inode是用来隔离资源,比如网络设备、IP地址、IP路由、端口号等。

54. nsPID -- PID 命名空间

这个命名空间的Inode是用来隔离进程ID数量,意思是它们不必保持唯一。因此,每个命名空间可以有它自己的'init/systemd'来管理不同的初始化任务,收割孤立的子进程。

55. nsUSER -- USER 命名空间

这个命名空间的Inode是用来隔离用户和组ID数量。因此,一个进程如果有一个0的用户ID,可以在用户命名空间之外有一个普通的没有特权的用户ID,在命名空间中有所有root权限。

56. nsUTS -- UTS 命名空间

这个命名空间的Inode是用来隔离主机名和 NIS 域名。UTS的意思是“UNIX 时间共享系统”

57. vMj -- 主要页面错误计数增量

自从上次更新之后,任务的主要页面错误计数。(参考48. nMaj -- 主要页面错误计数

58. vMn -- 次要页面错误计数增量

自从上次更新之后,任务的次要页面错误计数。(参考49. nMin -- 次要页面错误计数

3.2 字段管理

在top初始界面时按下'f'或'F',切换到新页面,显示字段管理界面。在最上边几行显示了当前窗口的名称,排序依据的字段,所有字段的当前顺序以及说明。前边有*的字段是初始界面展示的字段。

字段管理界面使用方法:

按键功能
方向上键光标移动到上一个字段
方向下键光标移动到下一个字段
Home键/PgUp键光标移动到第一个字段
End键/PgDn键光标移动到最后一个字段
空格键/d切换显示状态
s设置为排序依据字段
方向右键拿起字段,可以移动位置
方向左键/回车放下字段
a/w在4种窗口中切换:1.默认,2.任务,3.内存,4.用户
Esc键/q退出当前窗口

字段管理界面还可用于在全屏模式或可变显示模式下更改当前的窗口/字段组。按下'q'时,当前字段管理界面选定的窗口类型将在初始界面生效。

提示:如果在字段管理界面有修改,任何横向滚动的窗口都会重置。纵向滚动的窗口则不会。

4. 交互命令

4.1 全局命令(用*标注的是无法在安全模式时使用的,在一级帮助文档中也不会展示)

回车/空格:刷新显示界面

这些命令将唤醒top,在收到任何输入后,将重新绘制整个显示屏。它们还强制更新任何热插拔的cpu或物理内存更改。如果你有一个很大的延迟间隔参数,并且想立刻看到当前的状态,就可以使用这个命令。

?/ h: 帮助文档

有两种等级的帮助文档。第一种是展示余下的所有基本交互命令,如果top处在安全模式,那么帮助文档将会是缩写的。在帮助界面点击'?'或'h'将会提供适合可变显示模式的交互式命令的帮助。

这是老版本的帮助文档,只是举个例子 

= :退出任务限制

删除任务展示的限制。这个命令会使'i'(空闲任务)、'n'(最大任务)、'v'(隐藏子任务)这些命令的效果反转。它还提供了从 PID 监控、用户过滤、其他过滤和定位处理的退出。另外,如果窗口已经滚动了,这个命令也可以重置窗口。

0:0压缩切换

这个命令决定在任务窗口的许多字段是否显示'0',UID、GID、NI、PR和P不会被影响。

A:可变显示模式切换

在全屏显示和可变显示之间切换。关于可变显示的操作,参考5. 可变显示

B:粗体切换

此命令将影响粗体术语信息功能的使用,并更改“当前”窗口的摘要区域和任务区域。 虽然它主要用于哑终端,但它可以随时应用。

提示:当切换状态是开启且top运行在单色模式,所有文字会展示为非粗体字体。因此,除非'x'和/或'y'切换为反选项来强调,否则没有视觉确认它们是开启的。

* d | s :改变间隔时间

可以使用分数,但不能用负数。输入0会导致持续的刷新,系统会想放弃top的进程。这个参数值与系统负载成反比,所以小心行事。如果想查看当前的值,点击'h'或'?'打开帮助界面,在最上边的概览里可以看到。

E:概览区域的扩展的内存表示单位

可以循环切换内存单位,从KiB到EiB。如果看到数字和后边的标志之间有个'+',意味着top强制把这个数的一部分省略显示了。改变单位可以改变这个状况。

 

e:任务窗口的扩展的内存表示单位

可以循环切换内存单位,从KiB到PiB。虽然 top 会尝试遵守选定的目标范围,但为了适应当前值,可能仍然需要额外的缩放。 如果希望在内存列中看到更均匀的结果,提高缩放范围通常会实现该目标。 然而,将它提高得太高可能会产生一个全零结果,这不能用'0'交互命令来抑制。

g:选择另一个界面/字段组

在点击'g'之后top会提示你输入1到4中的一个数字,以此来决定显示哪种窗口(1.默认,2.任务,3.内存,4.用户)。

默认的这里就不展示了。

任务窗口:

内存窗口: 

用户窗口: 

H:线程模式切换

这个切换为开启时,将为所有可见任务窗口中的所有进程展示单个线程。否则,每个进程展示线程的总和。

I:Irix/Solaris模式切换

Solaris模式时,任务的cpu使用情况将除以cpu总数。

* k:杀掉一个任务

输入一个PID,就会发出一个信号。不输入PID或PID为负数时,将默认为展示的第一个任务。0意味着top进程本身。默认信号是SIGTERM。但是你可以通过输入数字或信号名来发信号。如果你希望取消“杀掉任务”操作,下边几种方法可能有效(根据你的进程):

1)输入一个非法数字作为pid

2)输入0作为信号

3)点击Esc键

q:退出

* r:重新调整任务的优先级

需要输入一个PID和一个优先级参数。不输入PID或PID为负数时,将默认为展示的第一个任务。0意味着top进程本身。正数将导致进程失去优先级。相反的,负数将导致一个进程更受内核青睐。一般的,普通用户只能增加优先级参数,不能降低。

如果你希望取消“重新调整任务的优先级”操作,下边几种方法可能有效(根据你的进程):

1)输入一个非法数字作为pid

2)输入优先级参数时直接点击回车键

3)点击Esc键

W:写配置文件

保存所有当前切换的状态、当前展示模式和间隔时间。在退出之前执行这个命令,下次启动top时将会是相同状态。

X:额外固定宽度

一些字段是固定宽度的。它们会被截断,这将在最后一个位置用“+”表示。这个交互命令可以改变以下字段的宽度:

字段默认值
GID5
RUID5
SUID5
UID5
GROUP8
LXC8
RUSER8
SUSER8
TTY8
USER8
WCHAN10
nsIPC10
nsMNT10
nsNET10
nsPID10
nsUSER10
nsUTS10

你会被提示输入一个数值,这个数加上默认值就是最终的宽度。如果输入一个负数,top会自动调整列的大小直到没有截断显示为止,你可以减小间隔时间或长按空格键来加速这个过程。

提示:不管是哪种增加宽度的方式,top从来不会减小字段宽度,你必须输入一个较小的数或恢复默认值。

Y:检查其他输出

输入'Y'之后,需要输入一个目标PID。输入一个值或在另一个屏幕接受默认结果。当普通top的迭代展示暂停时,那个屏幕可以用来显示多种文件或者管道命令输出。

提示:只有在top配置文件最后加上支持的配置后,这个功能才能使用。

大多数用于导航 Inspect 功能的键都反映在其标题序言中。但是当你选择了一个文件或命令后,还有额外的键需要操作。这些键对于用过'less'命令的人来说比较熟悉,列在下边以供参考:

功能
=改变状态行、文件或管道
/找到,等于'L'定位
n找到下一个,等于'&'找到下一个
空格向下滚动,等于<PgDn>
b向上滚动,等于<PgUp>
g跳转到第一行,等于<Home>
G跳转到最后一行,等于<End>

Z:改变配色

这个命令会带你去另一个屏幕,在那里可以改变当前窗口的配色方案,或者所有窗口。

4.2 概览区域命令

在全屏模式和可变显示模式中都生效。但是只影响当前窗口/字段组。

C:滚动坐标展示 切换

是否展示当前任务窗口的坐标。

l:平均负载/运行时间 切换

是否展示top的第一行信息,包括运行时间,用户数等等信息。

t:任务/CPU状态 切换

此命令切换概览区域的行数从2到很多行,这取决于“1”、“2”或“3”命令切换的状态以及 top 是否在真正的 SMP 下运行。这个部分也被'H'交互命令影响,是否展示任务或线程。这个命令是一个4选项的切换命令:

        1. 按类别划分的详细百分比

        2. 缩写的用户/系统和总数%+条状图

        3. 缩写的用户/系统和总数%+块状图

        4. 不展示任务和cpu状态

在任一图形模式下运行时,如果同时显示单个 CPU 或 NUMA 节点,则显示会变得更有意义。 有关更多信息,请参阅下面的“1”、“2”和“3”命令。

m:内存/swap使用 切换

影响物理内存和虚拟内存的展示。4选项的切换命令:

        1. 按内存类型划分的详细百分比

        2. 缩写的用户/系统和总数%+条状图

        3. 缩写的用户/系统和总数%+块状图

        4. 不展示内存

1:总/分CPU状态 切换

这个命令影响't'命令的展示效果。尽管这个命令是展示多个平行SMP机器的,但并不局限于单一的SMP环境。当'1'切换是开启状态时,展示cpu的总和数据,关闭时,每行分别展示每一个cpu。

2:NUMA节点/CPU概览 切换

在cpu概览和基本展示加上每一个NUMA节点的cpu情况之间进行切换。只在支持NUMA的系统中支持这个命令。

3:扩展NUMA节点

输入一个数字,代表NUMA节点。在确认之后,一个节点概览加上这个节点的每一个cpu的统计数据将会被展示出来。只在支持NUMA的系统中支持这个命令。

4.3 任务区域命令

任务区域在全屏模式是一直存在的。但在可变显示模式中,如果任务展示切换功能是关闭的,就不显示任务区域了。

任务窗口的外观:

J:数字列对齐 切换

在数字右对齐(默认)和数字左对齐之间切换。

j:字符列对齐 切换

在字符右对齐(默认)和字符左对齐之间切换。

以下的命令也会被'B'命令影响:

b:粗体/反转 切换

这个命令会影响'x'和'y'的效果。也会影响概览区域的条状图,如果使用了't'或'm'。

x:列高亮 切换

在这个命令切换为开启时,作为排序依据的列将会高亮显示。这也可以从视觉上提醒忘了排序依据的使用者。

提示:任何时候只要搜索或其他筛选功能生效,列高亮就不会生效。

y:行高亮 切换

把运行中的任务所在的行设置为高亮。

z:彩色/单色 切换

把当前窗口在上次使用的配色方案和比较早使用的黑白相间配色之间切换。这个功能会切换概览区域和任务区域,但不会影响'x','y','z'。

任务窗口的内容:

c:命令行/程序名 切换

这个命令不管当前是否展示了命令(COMMAND)列,都能生效。当你重新展示命令列之后,就能看到变化。

f | F:字段管理

展示字段管理窗口,字段管理的详细用法参考上边讲过的3.2小节。下边是老版的界面,比新版缺少一些字段。 

o | O:其他筛选器

系统将提示你输入选择标准,然后确定哪些任务将显示在“当前”窗口中。你的条件可以区分大小写,也可以忽略大小写。并确定top是否应包含或排除匹配的任务。参考5.5小节。

S:累计时间模式 切换

当它是开启时,展示每个进程和它们的被杀掉的子进程的cpu时间。当它关闭时,程序的分支进程要求较低。对于'init'或者shell这是近似的,但是对于编译器就大概率不是。打开两个窗口,拥有相同的排序依据字段,但是'S'状态不同,看看两个的效果哪个是你的菜。

u | U:展示特定用户

点击这个命令后你会被提示输入用户id或用户名。只展示用户id或用户名匹配给定参数的进程。'u' 匹配有效用户,'U' 匹配任何用户(真实的、有效的、已存的或文件系统)。如果想切回到全部用户,再次点击u或U,不输入任何字符就点击回车即可。

V:森林模式 切换

在这个模式中,任务根据父进程重新排序,展示为树状结构。在这个模式中,依然可以切换命令行和程序名(c),或者切换任务和线程(H)。操作任何可以改变排序规则的交互功能就会退出森林模式。

v:隐藏/显示子进程 切换

在森林模式中,这个命令可以显示或隐藏子进程。如果被选定的进程没有子进程,就无事发生。不在森林模式也无事发生。

任务窗口的大小

i:空闲进程 切换

当这个切换状态是'关闭'时,从上一次展示到现在没有使用任何CPU的任务不会被展示。

n | #:设置最大任务

使用这个命令后将会提示你输入一个数字,这个数字表示显示任务的数量,如果是0代表无限制。

任务窗口的排序:

字段
M%MEM
NPID
P%CPU
TTIME+

在使用排序功能之前,建议切换'x',把排序字段列切换成高亮,这样就能更明显看出效果。

<:左移排序依据列

>:右移排序依据列

f | F:打开字段管理界面,参考3.2 字段管理。

R:升/降序切换

在升序和降序之间切换。

4.4 配色方案

点击'Z'进入配置界面。可以对四种窗口(默认、任务、内存、用户)进行配色方案的配置。每个窗口都需要选择大写字母与数字搭配,分别对这个窗口中的各种部分进行颜色配置。在这个界面中,a/w可以确认当前窗口的方案并切到下一个窗口,回车键可以确认当前方案并退出到初始界面,这时展示的就是刚刚配置的配色方案。q表示取消当前配置并退出。全屏模式和可变显示模式都会对配置的配色方案生效。

5. 可变显示模式

5.1 窗口总览:

字段组/窗口:

在全屏模式,只能同时显示一个窗口,根据概览区域进行区分。但在可变显示模式,4种窗口可以共存,从上到下依次排列。也可以单独关闭某些窗口。

当前窗口:

概览区域里的窗口名字所指的窗口。

5.2 窗口的命令:

- | _:显示/隐藏窗口 切换

“-”键可打开和关闭“当前”窗口的任务显示。启用时,该任务区域将显示你使用“f”交互命令建立的最少列标题。它还将反映你应用的任何其他任务区域选项/切换,从而产生零个或多个任务。“_”键对所有任务显示执行相同的操作。换句话说,它在当前可见的任务显示和您已关闭的任何任务显示之间切换。如果所有4个任务显示当前可见,则此交互式命令将保留摘要区域作为唯一的显示元素。

 下边是输入'-'之后,隐藏了3窗口

= | +:等效窗口

'='的功能是强制让当前窗口的任务展示可见。它也会反转i(空闲任务),n(最大任务),u|U(用户筛选器),o|O(其他筛选器),v(隐藏子进程)和L(定位)命令的效果。如果窗口已经被滚动过了,执行'='命令也会使窗口恢复。

'+'的功能是让4个任务展示重新出现,占用的屏幕大小一致。也会保持之前的所有配置,除了i(空闲任务),n(最大任务),u|U(用户筛选器),o|O(其他筛选器),v(隐藏子进程)和L(定位)以及滚动交互命令。

A:显示模式切换

在全屏模式和可变显示模式之间切换。

a | w:下一个窗口向前/向后

这个命令会改变当前窗口,a是切到下一个窗口,w是切到上一个窗口。

g:选择另一个窗口/字段组

你会被提示输入一个1-4之间的数,来决定在当前窗口显示的字段组。

G:改变窗口/字段组

你会被提示输入一个当前窗口的新名字。

5.3 窗口滚动:

通常,任务窗口是系统总任务/线程的局部视图,它仅显示一些可用的字段/列。 使用这些滚动键,您可以垂直或水平移动该视图以显示任何所需的任务或列。

Up,PgUp:滚动任务

向上移动视图,直到第一个任务出现在当前窗口的最上边一行。Up移动一行,PgUp移动整个窗口高度。

Down,PgDn:滚动任务

向下移动视图,直到最后一个任务出现在当前窗口的最下边一行。Down移动一行,PgDn移动整个窗口高度。

Left,Right:滚动列

向左或向右移动展示的字段的视图,每次移动一列。

提示:提醒一下,某些字段/列不是固定宽度的,而是在可见时分配了所有剩余的屏幕宽度。 向右或向左滚动时,该功能最初可能会产生一些意想不到的结果。此外,当定位为最后显示的字段时,任何可变宽度字段都有特殊规定。 一旦通过向右箭头键到达该字段,因此它是唯一显示的列,您可以继续在该字段内水平滚动。

Home:跳转到最上位置

使视图归位。

End:跳转到最下位置

最右边的列显示最后一个字段,最下边的行显示最后一个任务。

C:展示滚动坐标 切换

切换信息性消息,只要消息行没有被使用,就会显示该消息。 该消息将采用两种形式之一,具体取决于是否还滚动了可变宽度列。

滚动坐标:y = n/n (任务),x = n/n (字段)

滚动坐标:y = n/n (任务),x = n/n (字段) + nn

这上边展示的n/n作为坐标和当前窗口的左上角有相对关系。额外的'+ nn' 代表被横向滚动时到可变宽度列的位移。

y = n/n (任务)

第一个n代表当前窗口最上边的任务在所有任务中的位置。第二个n代表所有任务的数量。

x = n/n (字段)

第一个n代表当前窗口最左边的列在所有列中的位置。第二个n代表所有在'f'配置中配置的展示字段的数量。

当可变显示模式的当前窗口任务展示的切换状态是关闭的话,是不能使用这个命令的。全屏模式总是可以使用这个命令。

提示:当任何形式的过滤处于活动状态时,你可以发现一些滚动时会出现轻微偏差,因为并非所有任务都可见。 这在使用向上/向下箭头时尤为明显。

5.4 在窗口内搜索:

你可以使用这些交互命令定位一个包含具体值的任务行。

L:定位一个字符串

你会被提示输入大小写敏感的字符串来确定开始坐标。没有格式限制。搜索不限制是单独的字段或列。所有展示在任务行中的值都可以搜索。可以包括空格、数字、符号甚至森林视图格式。

&:定位下一个

找到下一个匹配的字符串。

当找到一个匹配的时候,当前窗口会在竖直方向重新排序使得匹配字符串的任务行显示在第一行。从滚动坐标也可以看出变化。

如果一个搜索失败了,刷新重置当前窗口。重新选择更稳定的搜索字段。

提示:搜索模式中,top会把列高亮关闭。

5.5 窗口中的筛选

你可以用'其他筛选器'特性来创建选择标准,这个标准会决定接下来在当前窗口显示的任务。可以提前在配置文件中配置。

创建一个筛选器需要:

        1. 一个字段名

        2. 一个运算符

        3. 一个选定的值,作为最小值

详细说明:

        1. 字段名是大小写敏感的且必须是字段列表里存在的。

        2. 选定的值不必包括展示的整个字段

        3. 选定的值或者大小写敏感,或者不敏感

        4. 加'!'前缀表示不包含

        5. 多种选择标准可以在一个任务窗口使用

        6. 包含和不包含标准可以同时使用

        7. 1种等于符号'='和2种比较运算符'<''>'可以自由混合

        8. 为每个任务窗口维护单独的唯一过滤器

如果字段未打开或当前不在视图中,则你的选择标准不会影响显示。 稍后,如果过滤的字段变得可见,则将应用选择标准。

功能介绍:

o:其他筛选器(小写)

匹配时忽略大小写。

O:其他筛选器(大写)

大小写敏感。

^O:展示激活的筛选器(Ctrl + o)

这可以作为在当前窗口中哪一个筛选器在使用的提醒。结果会显示在消息行。

=:在当前窗口重置筛选

清除当前窗口的所有选择标准。会有另外的影响,参考4.1 全局命令。

+:在所有窗口重置筛选

清除所有窗口的所有选择标准(可变显示模式)。会有另外的影响,参考5.2 窗口命令。

输入的条件:

当提示输入选择标准时,你提供的数据必须满足两种格式之一。有三个必填信息,第四个是选填信息。

                                                        #4        #1                #2        #3

                                                                   字段名           ?       选定的值

                                                        !        字段名          ?       选定的值

#1,#3,#4应该是自定义的。#2包括分隔符和运算符('='、'<'、'>')。

相等运算符只需要部分匹配,这可以减少你的“选定的值”的输入要求。 '>' 或 '<' 关系运算符总是使用字符串比较,即使是数字字段也是如此。 它们旨在与字段的默认对齐方式和同类数据一起使用。 当某些字段的数字量已进行缩放而其他字段未进行缩放时,该数据不再是同质的。如果你建立了一个关系过滤器并更改了默认的数字或字符对齐方式,则该过滤器很可能会失败。 当关系过滤器应用于内存字段并且您没有更改缩放比例时,它可能会产生误导性结果。 例如,发生这种情况是因为当作为字符串进行比较时,‘100.0m’ (MiB) 看起来会大于‘1.000g’ (GiB)。

潜在问题:

下边的两个组过滤器可能会产生同样的结果,也可能第二个返回空的结果。

        GROUP=root            (只过滤相同的结果)

        GROUP=ROOT        (使用'o')

下边两个内存过滤器某一个可能结果有误,根据当前内存的展示单位。或者两个过滤器返回一样的结果。

        RES>9999                (只过滤相同的结果)

        !RES<10000             (内存单位为KiB)

这个nMin过滤器说明了可扩展字段特有的问题。 此特定字段最多可显示 4 位数字,超过此数字的值将自动缩放至 KiB 或更高。 因此,虽然存在大于 9999 的数量,但它们将显示为 2.6m、197k 等。

        nMin>9999                (总是展示空结果)

潜在解决方法:

这些示例说明了如何创造性地应用其他过滤来实现几乎任何所需的结果。 有时会显示单引号以分隔作为过滤器一部分的空格或准确表示状态请求 (^O)。 但是,如果你在现实生活中将它们与选定值一起使用,则不会找到匹配项。假定展示了nTH字段,第一个过滤器会展示多线程进程。这个也提醒我们结尾的空格是每一个字段的一部分。第二个过滤器得到了相同的结果。

        !nTH=` 1 '

        nTH>1

激活 Forest View 模式并查看 COMMAND 列时,这个过滤器有效地折叠了子进程,这样就只显示3个级别。

        !COMMAND=`           `_ '

最后两个过滤器显示为响应状态请求键 (^O)。 实际上,每个过滤器都需要单独的输入。 PR 示例显示了显示优先级为 20 或更高的任务所必需的两个并发过滤器,因为有些可能是负面的。 然后通过利用尾随空间,nMin 系列过滤器可以实现上面讨论的失败的“9999”目标。

        `PR>20' + `!PR=-'

        `!nMin=0 ' + `!nMin=1 ' + `!nMin=2 ' + `!nMin=3 ' ...

提示:每当其他过滤在窗口中处于活动状态时,top 将关闭列突出显示以防止内部非显示转义序列的错误匹配。 当窗口不再受过滤时,将恢复这种突出显示。 有关排序列突出显示的更多信息,请参阅“x”交互式命令。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值