TOP命令详解

linux
Illustration of a computer screen displaying the 'top' command in a Linux terminal environment. The screen shows various system statistics such as CPU usage, memory usage, and a list of running processes with columns for PID, USER, PR, NI, VIRT, RES, SHR, S, %CPU, %MEM, TIME+, and COMMAND. The terminal is styled with a dark background and light text, typical of a Unix-like system. Include visual elements like a keyboard and a desk to indicate a workspace environment.

本文档翻译自top的官方文档,可以通过以下命令进行查看

man top

基础操作

输入top命令后,可以进入监控界面

[root@www.zhangblogs.cn ~]# top

h可以进入帮助界面

q则可以退出界面,当然你也可以ctrl+c中断式的进行退出

如上图,top的运行界面共分为三部分

  1. 概要区域

  2. 字段/列标题

  3. 任务区域

除此之外,在概要区域和字段标题之间还有一个输入行

如果你需要切出top的运行屏幕可以尝试以下命令

  1. ctrl + Z 暂停top命令

  2. fg返回top命令

默认的启动项

  • 带星号(*)的项目可以通过命令行覆盖

全局默认设置

设置项状态说明
A - Alt displayOff (全屏)替代显示关闭,使用全屏模式
*d - 延迟时间1.5秒更新间隔时间
*H - 线程模式Off (作为任务汇总)线程显示关闭,以任务形式汇总
I - Irix模式On (关闭‘solaris’ smp)Irix模式开启,不使用Solaris SMP
*p - PID监控Off (显示所有进程)PID监控关闭,显示所有进程
*s - 安全模式Off (不安全)安全模式关闭
B - 粗体开启On (全局粗体)粗体显示开启

概要区域默认设置

设置项状态说明
l - 负载平均/运行时间On显示负载平均和系统运行时间
t - 任务/CPU状态On显示任务和CPU状态(共两行)
m - 内存/交换空间使用量On显示内存和交换空间使用情况
1 - 单核CPUOff单核CPU显示关闭,显示多核CPU状态

任务区域默认设置

设置项状态说明
b - 粗体高亮Off (使用‘反向’)粗体高亮关闭,使用反向显示
*c - 命令行显示Off (名称,非命令行)显示进程名称而非完整命仅令行
*i - 显示空闲任务On (显示所有任务)显示包括空闲任务在内的所有任务
J - 数字右对齐On (非左对齐)数字默认右对齐
j - 字符串右对齐Off (非右对齐)字符串不进行右对齐
R - 反向排序On (PID从高至低)进程ID反向排序(从高到低)
*S - 累计时间Off (无,无子进程)累计时间显示关闭
*u - 用户过滤Off (仅显示有效用户ID)用户过滤关闭,仅显示有效用户ID
*U - 用户过滤Off (显示任何用户ID)用户过滤关闭,显示任何用户ID
V - 森林视图On (以分支显示)显示进程为树状结构(父子关系)
x - 列高亮Off (无,排序字段)列高亮关闭,用于排序字段
y - 行高亮On (是,运行任务)行高亮开启,特别是对正在运行的任务进行高亮
z - 颜色/单色On (显示颜色)颜色显示开启

命令行操作

命令行语法如下

 top -hv|-bcHiOSs -d secs -n max -u|U user -p pid -o fld -w [cols]
  • -h | -v :帮助/版本 显示库版本和使用提示,然后退出。

  • -b :批处理模式操作

    以批处理模式启动 top,这在将 top输出发送到其他程序或文件时非常有用。在此模式下,top 不接受输入,并且会一直运行,直到您用 -n 命令行选项设置的迭代次数限制或被终止。

  • -c :命令行/程序名称切换

    以最后记住的 c 状态的相反状态启动 top。因此,如果 top 正在显示命令行,则该字段现在将显示程序名称,反之亦然。

  • -d :延迟时间间隔

    指定屏幕更新之间的延迟,并覆盖个人配置文件中或启动默认值中的相应值。

    进入运行窗口后可以用 ds 交互式命令更改此设置。

    支持小数秒,但不允许负数。但是,在任何情况下,如果 top 在安全模式下运行,这些更改都是被禁止的,除非是 root 用户(除非使用了 s 命令行选项)。

  • -H :线程模式操作

    指示 top 显示单个线程。没有这个命令行选项,每个进程中的所有线程将会合计显示。

    进入运行界面后可以用 H 交互式命令更改此设置。

  • -i :空闲进程切换

    以最后记住的 i 状态的相反状态启动 top

    当此切换关闭时,自上次更新以来未使用任何 CPU 的任务将不会被显示。

  • -n :迭代次数限制:-n number

    指定 top 应在结束前生成的最大迭代次数或帧数。

  • -o :覆盖排序字段:-o fieldname

    指定将对任务进行排序的字段名称,独立于配置文件中反映的内容。

    您可以在字段名称前加上 +- 来覆盖排序方向。+ 开头将强制从高到低排序,而 - 将确保从低到高排序。

    此选项主要用于支持自动化/脚本化的批处理模式操作。

  • -O :输出字段名称

    此选项作为上述 -o 选项的一种帮助形式。

    它会使 top 打印每个可用字段名称在单独的行上,然后退出。这些名称可能会进行本地化翻译。

  • -p :监控PID模式

    只监控指定进程 ID 的进程。

    top -pN1 -pN2 ... 
    #或 
    top -pN1,N2,N3 ...
    

    此选项最多可以给出20次,或者您可以提供最多20个 pid 的逗号分隔列表。混合使用这两种方法是允许的。

    PID值为零将被视为 top 程序本身的进程 ID 一旦它正在运行。

    这是仅命令行选项,如果您希望返回正常操作,不必退出并重新启动 top —— 只需发出任何这些交互命令:=uUpuU 命令行选项是互斥的。

  • -s :安全模式操作

    即使对于 root 用户也以强制安全模式启动 top

  • -S :累积时间切换

    以最后记住的 S 状态的相反状态启动 top。当累积时间模式开启时,每个进程将列出它和它的死亡子进程所使用的 CPU 时间。

  • -u | -U :用户过滤模式

    -u | -U number or name
    

    只显示与给定的用户 ID 或用户名匹配的进程。-u 选项匹配有效用户,而 -U 选项匹配任何用户(实际、有效、已保存或文件系统)。

    在用户 ID 或名称前加上感叹号 (’!’) 指示 top 只显示不匹配提供的用户的进程。 puU 命令行选项是互斥的。

  • -w :输出宽度覆盖

    -w [ number ]
    

    在批处理模式中,如果未使用参数,则 top 将使用设置的 COLUMNS= 和 LINES= 环境变量格式化输出。否则,宽度将固定为最大512列。使用参数时,输出宽度可以减少或增加(最多到512),但行数被认为是无限的。

    在正常显示模式下,如果未使用参数,则 top 将尝试使用设置的 COLUMNS= 和 LINES= 环境变量格式化输出。

    使用参数时,输出宽度只能减少,不能增加。无论是使用环境变量还是 -w 参数,当不在批处理模式下时,实际终端尺寸永远不能超过。 注意:如果不使用这个命令行选项,输出宽度始终基于调用 top 的终端,无论是否在批处理模式下。

概要区域

运行时间和负载平均值

概要区域的第一行是运行时间和负载均值,如下所示

top - 16:27:47 up 177 days, 39 min,  4 users,  load average: 0.00, 0.01, 0.05

这部分由单行组成,包括:

  • 程序或窗口名称,取决于显示模式

  • 当前时间和自上次启动以来的运行时间

  • 用户总数

  • 最近1分钟、5分钟和15分钟的系统负载平均值

关于平均负载

平均负载(Load Average)是系统在特定时间间隔内运行队列中的平均进程数。

平均负载的计算方式

  1. 监测进程状态:系统会监测所有正在使用或等待使用CPU资源的进程(不包括等待IO操作或未激活的进程)。

  2. 计算时间间隔内的平均值:每隔一定时间(通常是5秒),系统会检查所有活跃的进程(即那些状态为运行或等待运行的进程),并记录这些进数。这些检查通常由系统调度器执行。

  3. 滑动平均算法:对这些即时测得的数值使用指数衰减的方式来计算平均值。这意味着最近的测量结果对平均值的影响比较早前的测量结果更大。

    计算公式如下:

    L_{x} = L_{x-1} + \frac{A - L_{x-1}}{T} ​

    • L_{x} 是当前计算得到的平均负载。

    • L_{x-1} 是上一次计算的平均负载。

    • A 是在当前检查点活跃的进程数。

    • T 是用于计算不同时间段平均负载的常数(例如1、5、15分钟对应的调整系数)。

任务和CPU状态

概要区的第二行则是任务概要和cpu状态

Threads: 308 total,   1 running, 306 sleeping,   1 stopped,   0 zombie
%Cpu(s):  0.5 us,  0.5 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

这部分至少包含两行。在SMP(对称多处理)环境中,额外的行可以反映各个CPU的状态百分比。

  • 第一行显示总任务或线程数,取决于线程模式切换的状态。

    这个总数进一步分类为:运行中running;睡眠中sleeping;已停止stopped;僵尸线程zombie

  • 第二行基于自上次刷新以来的间隔显示CPU状态百分比。

    默认情况下,会显示这些各个类别的百分比。下面显示了两个标签,较新的内核版本位于前面

    • us, user:运行非nice的用户进程的时间

    • sy, system:运行内核进程的时间

    • ni, nice:运行nice的用户进程的时间

    • id, idle:在内核空闲处理程序中花费的时间

    • wa, IO-wait:等待I/O完成的时间

    • hi:处理硬中断的时间

    • si:处理软中断的时间

    • st:从当前虚拟机分配的时间中被调走用于其他虚拟机或管理程序自身操作的CPU时间。这通常发生在资源争用激烈的环境中,当物理主机上运行多个虚拟机时,管理程序可能会从一个虚拟机“借用”时间来满足另一个虚拟机的需求。

在备用CPU状态显示模式中,除了第一行任务/线程外,还会显示一个简略的总结,包括以下元素:

t进入这个cpu指标监控模式

           a    b     c    d
%Cpu(s):  75.0/25.0  100[ ...

a) 是us和ni的综合百分比;

b) 是sy百分比;

c) 是总计;

d) 是这些表示的两种视觉图形之一

软中断和硬中断

硬中断

硬中断是由硬件设备产生的中断,当硬件设备需要CPU注意时会发出中断请求。硬中断可以来自多种外部硬件,如键盘、鼠标、网络适配器和其他外部设备。硬中断的主要特点包括:

  • 即时性:硬中断通常是即时发生的,需要操作系统立即响应。

  • 外部触发:完全由外部设备触发,与软件程序的执行无关。

  • 优先级:硬中断可以拥有不同的优先级,允许重要的中断先处理。

  • 直接处理:当硬件中断发生时,CPU会立即停止当前执行的任务(根据优先级和其他条件),保存现场后处理中断。

软中断

软中断(又称为软件中断或软件触发的中断)通常是操作系统内部生成的,用于处理非紧急的任务或在用户程序和硬件之间提供更灵活的处理机制。软中断的主要特点包括:

  • 由软件触发:可以由操作系统根据需要或特定事件触发,而非直接由硬件触发。

  • 处理分散任务:经常用来处理可以延迟的任务,如网络数据包的处理或文件系统操作。

  • 延迟执行:软中断可能不会立即执行,它们的执行可以根据系统的负载和调度策略进行调整。

  • 资源利用优化:通过延迟和批量处理中断事件,可以减少CPU的中断频率,优化系统资源使用。

内存使用情况

这部分由两行组成,可能根据E交互命令强制的缩放因子,以kibibytes (KiB) 到exbibytes (EiB) 显示数值。

KiB Mem :  1798504 total,    82332 free,   908688 used,   807484 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   709768 avail Mem 
  • 默认情况下,第一行反映物理内存,分类为

    总计 total,空闲 free,已使用 used 和缓冲/缓存 buff/cache

  • 第二行主要反映虚拟内存,分类为

    总计 total,空闲 free,已使用 used 和可用 avail Mem (即物理内存)

第二行的可用数字是启动新应用程序时可用的物理内存的估计值,不含交换分区。

与free字段不同,它涵盖容易回收的页面缓存和内存块。

在备用内存显示模式中,显示两行简略总结,包括以下元素:

m进入这个模式

           a    b          c
GiB Mem : 18.7/15.738   [ ...
GiB Swap:  0.0/7.999    [ ...

其中:a) 是使用的百分比;b) 是总可用量;c) 是这些表示的两种视觉图形之一。

字段区域

字段描述

任何字段都可以作为排序字段,你可以控制它们是按高到低还是按低到高排序。

关于物理内存或虚拟内存的字段引用 (KiB),这是未加后缀的显示模式。然而,这些字段可以从KiB扩展到PiB。该缩放通过 e 交互命令控制或通过构建选项为启动设定。

序号字段描述
1%CPU自上次屏幕更新以来,任务占用的CPU时间的百分比。在真正的SMP环境中,如果进程是多线程的且top未在线程模式下运行,可能会报告超过100%的使用率。
2%MEM任务当前使用的可用物理内存的比例。
3CGROUPS进程所属的控制组的名称,或者如果不适用则为 -
4CODE用于可执行代码的物理内存量,也称为文本常驻集大小或TRS。
5COMMAND显示启动任务的命令行或关联程序的名称。
6DATA用于非执行代码的物理内存量,也称为数据常驻集大小或DRS。
7ENVIRON显示进程可见的所有环境变量。
8FLAGS任务当前调度标志,用十六进制表示,省略前导零。
9GID有效的组ID。
10GROUP有效的组名称。
11NI任务的nice值。负值表示更高优先级,正值表示较低优先级。
12P上次使用的处理器号。在真正的SMP环境中,这个值可能会频繁变化。
13PGRP进程组ID。
14PID任务的唯一进程ID。
15PPID父进程的进程ID。
16PR任务的调度优先级。如果这个字段显示 rt,意味着任务正在运行在实时调度优先级下。
17RES任务正在使用的未交换的物理内存大小。
18RUID真实用户ID。
19RUSER真实用户名。
20S任务的状态,如 D(不可中断睡眠)、R(运行)、S(睡眠)、T(任务控制信号停止)、t(调试器跟踪停止)或Z(僵尸)。
21SHR任务可用的共享内存大小。
22SID会话ID。
23SUID保存的用户ID。
24SUPGIDS在登录时建立或从任务父进程继承的任何补充组ID。
25SUPGRPS在登录时建立或从任务父进程继承的任何补充组名称。
26SUSER保存的用户名。
27SWAP任务地址空间的未
28TGID线程组ID,是线程组领导的PID。
29TIME任务自启动以来使用的CPU总时间。
30TIME+CPU时间,以百分之一秒为单位显示更精细的粒度。
31TPGID连接tty的前台进程组的进程组ID,如果进程未连接到终端则为-1。
32TTY控制终端的名称。
33UID任务所有者的有效用户ID。
34USED任务已使用的非交换物理内存总量。
35USER任务所有者的有效用户名。
36VIRT任务使用的虚拟内存总量。
37WCHAN任务当前睡眠的内核函数的名称或地址。
38nDRT自上次写入辅助存储以来已修改的页面数。
39nMaj发生的主要页面错误数。
40nMin发生的次要页面错误数。
41nTH与进程关联的线程数。
42nsIPC用于隔离进程间通信资源的IPC命名空间的节点。
43nsMNT用于隔离文件系统挂载点的MNT命名空间的节点。
44nsNET用于隔离网络资源的NET命名空间的节点。
45nsPID用于隔离进程ID的PID命名空间的节点。
46nsUSER用于隔离用户和组ID的USER命名空间的节点。
47nsUTS用于隔离主机名和NIS域名的UTS命名空间的节点。
48vMj自上次更新以来发生的主要页面错误数增量。
49vMn自上次更新以来发生的次要页面错误数增量。

管理字段

在按下交互命令 fF(字段管理)之后,你将看到一个屏幕,显示:1) 当前窗口名称;2) 指定的排序字段;3) 所有字段及其当前顺序和描述。标有星号的条目表示当前显示的字段,视屏幕宽度而定。

  • 根据屏幕上的指示,你可以使用上下箭头键在字段之间导航。PgUp、PgDn、Home 和 End 键也可以用来快速到达第一个或最后一个可用字段。

  • 右箭头键选中一个字段进行重新定位,左箭头键或 <Enter> 键确认该字段的位置。

  • d 键或空格键切换字段的显示状态,从而决定是否显示星号。

  • s 键指定一个字段作为排序字段。有关选择排序字段的更多信息,请参见第4c节“任务区命令,排序”。

  • aw 键可以用来在所有可用窗口之间循环,q<Esc> 键退出字段管理。

字段管理屏幕还可以用来更改“当前”窗口/字段组,无论是在全屏模式还是交替显示模式下。当按下 q<Esc> 时,所选目标将在你返回顶部显示时被设置为当前。

注意:通过字段管理屏幕进行任何字段更改时,任何已水平滚动的窗口都将被重置。然而,任何垂直滚动的位置将不受影响。

%cpu 值的两种模式

Irix模式

  • 说明:在Irix模式下,top 显示的CPU使用率是针对单个CPU的。如果一个系统有多个CPU,那么进程的CPU使用率可能会超过100%。例如,一个四核系统上的进程,如果完全使用了四个核心,其CPU使用率将显示为400%。

  • 适用场景:这种模式适合于需要了解单个进程在所有CPU核心上的总体资源占用情况的场景。

  • 切换方法:在top 中,你可以使用 I 交互命令来切换到或退出Irix模式。

Solaris模式

  • 说明:在Solaris模式下,进程的CPU使用率是基于所有CPU核心的平均值计算的。这意味着,即使进程使用了所有可用的CPU资源,其最大显示值也只会是100%。这是通过将总CPU使用时间除以CPU核心数来实现的。

  • 适用场景:这种模式适合于希望了解进程相对于整个系统的CPU使用效率的用户,因为它提供了一个标准化的使用率测量,不受CPU核心数量的影响。

  • 切换方法:使用 I 交互命令可以在Irix模式和Solaris模式之间切换。

Data 字段

在许多操作系统的任务管理器或系统监控工具中,DATA 字段经常被用来表示进程所使用的数据内存加上栈空间的总和。这通常包括程序数据(如全局变量和堆分配的内存)以及执行线程的堆栈。这个指标有助于理解一个进程占用的非代码部分的物理内存量。

数据和栈的组成

  1. 数据 (Data):

    • 初始化的数据段(已初始化的全局变量和静态变量)

    • 未初始化的数据段(未初始化的全局变量和静态变量)

    • (动态分配的内存,如通过 malloc, new 等分配)

  2. 栈 (Stack):

    • 每个线程都有自己的栈,用于存储局部变量、函数参数和返回地址。

如何计算 DATA 字段

DATA 字段的计算通常涉及以下步骤:

  • 获取数据段的大小:这部分可以通过检查进程的内存映射来确定,数据段通常标记为包含数据和BSS(未初始化数据)的区域。

  • 获取堆的大小:堆的大小是动态的,可以通过特定系统调用或从相应的内存管理接口中查询到当前进程已分配但尚未释放的内存量。

  • 获取栈的大小:栈的大小可以通过检查每个线程的栈区间来估算。在某些系统中,可以通过查看进程的内存映射中的栈区间来获取。

具体实现

在Linux系统中,这些信息可以通过 /proc/[pid]/statm/proc/[pid]/smaps 或类似的文件来查看。例如:

  • /proc/[pid]/statm 提供了进程的内存使用情况的总览,包括总大小、常驻集大小等。

  • /proc/[pid]/smaps 提供了更详细的每个内存段的信息,包括数据段、堆和栈的详细内存使用情况。

通过这些信息,系统监控工具可以计算出DATA字段的值,从而帮助系统管理员和开发者了解进程的内存使用状况。这对于性能分析、资源管理和故障排查都非常重要。

交互命令

分类命令说明
全局命令<Ent/Sp>, ?, =, 0, A, B, d, E, e, g, h, H, I, k, q, r, s, W, X, Y, Z适用于整个 top 界面的通用命令
概要区域命令C, l, t, m, 1, 2, 3用于管理和显示概要信息区域的命令
任务区命令 - 外观b, J, j, x, y, z调整任务列表的外观
任务区命令 - 内容c, f, F, o, O, S, u, U, V定制任务列表的内容显示
任务区命令 - 大小#, i, n调整任务列表的尺寸和数量限制
任务区命令 - 排序<, >, f, F, R控制任务列表的排序方式
颜色映射<Ret>, a, B, b, H, M, q, S, T, w, z, 0 - 7定制 top 界面的颜色设置
窗口命令-, _, =, +, A, a, g, G, w管理多窗口布局和视图
滚动窗口C, Up, Dn, Left, Right, PgUp, PgDn, Home, End在窗口内滚动查看更多内容
窗口中搜索L, &在窗口中搜索特定内容

** 全局命令**

以下是 top 命令中的全局交互命令列表。这些命令在全屏模式和交替显示模式下始终可用。然而,在安全模式下运行时,某些交互命令将不可用。

如果你想提前知道你的 top 是否处于安全模式,只需请求帮助并查看第二行的系统摘要。

  • <Enter><Space> :刷新显示 这些命令将唤醒 top,并在接收到任何输入后重新绘制整个显示屏。它们还强制更新任何热插拔的 CPU 或物理内存变化。 如果你设置了较长的延迟间隔,并希望查看当前状态,请使用这些键。

  • ? | h :帮助 有两个帮助级别可用。第一个将提供所有基本交互命令的提醒。如果 top 处于安全模式,该屏幕将会缩短。 在帮助屏幕上输入 h? 将带你进入适用于交替显示模式的交互命令帮助。

  • = :退出任务限制 移除对显示任务的限制。此命令将撤销任何激活的 i(空闲任务)和 n(最大任务)命令。它还提供从 PID 监控、用户过滤和其他过滤中退出的方式。有关 PID 监控,请参见 -p 命令行选项,关于用户过滤,请参见 Uu 交互命令,关于其他过滤,请参见 Oo 交互命令。此外,任何已滚动的窗口都将通过此命令重置。有关垂直和水平滚动的更多信息,请参见主题 5c。滚动窗口。 在交替显示模式下操作时,此命令具有更广泛的含义。

  • 0 :零抑制切换 此命令决定许多任务窗口字段中的零是显示还是被抑制。如 UID、GID、NI、PR 或 P 等字段不受此切换影响。

  • A :交替显示模式切换 此命令将在全屏模式和交替显示模式之间切换。有关“当前”窗口和字段组的详细信息,请参见主题 5. 交替显示规定和 g 交互命令。

  • B :粗体禁用/启用切换 此命令将影响粗体 terminfo 功能的使用,并改变“当前”窗口的摘要区域和任务区域。虽然它主要用于非智能终端,但可以在任何时候应用。 注意:当此切换开启并且 top 在单色模式下运行时,整个显示将看起来像普通文本。因此,除非 x 和/或 y 切换使用反转来强调,否则不会有视觉上的确认它们是否开启。

  • d | s :更改延迟时间间隔 你将被提示输入显示更新之间的延迟时间(以秒为单位)。 小数秒将被接受,但不允许输入负数。输入0将导致(几乎)连续更新,但显示效果可能不佳,因为系统和 tty 驱动程序试图跟上 top 的要求。延迟值与系统负载成反比,因此请小心

设置。 如果你想知道当前的延迟时间,只需请求帮助并查看第二行的系统摘要。

  • E :在摘要区域扩展内存规模 通过此命令,你可以在可用的摘要区域内存规模中循环,范围从 KiB(千字节或1024字节)到 EiB(艾字节或1,152,921,504,606,846,976字节)。 如果你看到显示数字和随后标签之间有一个 +,这意味着 top 被迫截断了部分数字。通过提高缩放因子,可以避免这种截断。

  • e :在任务窗口扩展内存规模 通过此命令,你可以在可用的任务窗口内存规模中循环,范围从 KiB(千字节或1024字节)到 PiB(拍字节或1,125,899,906,842,624字节)。 虽然 top 将尝试尊重选定的目标范围,但为了适应当前值,可能仍需要额外的缩放。如果你希望在内存列中看到更均匀的结果,提高缩放范围通常可以实现这一目标。然而,如果提高得太高,可能会产生全零结果,这不能通过 0 交互命令抑制。

  • g :选择另一个窗口/字段组 你将被提示输入一个数字(1到4之间),以指定应将哪个字段组设为“当前”窗口。在尝试交替显示模式后,你很快就会熟悉这4个窗口。

  • H :线程模式切换 当此切换开启时,所有进程的单个线程将在所有可见的任务窗口中显示。否则,top 将显示每个进程中所有线程的总和。

  • I :Irix/Solaris 模式切换 在 Solaris 模式下运行时(I 切换关闭),任务的 CPU 使用率将除以 CPU 的总数。发出此命令后,你将被告知此切换的新状态。

被告知此切换的新状态。

  • k :终止任务 你将被提示输入一个进程 ID (PID) 然后是要发送的信号。 如果没有输入 PID 或输入了负数,将按提示中显示的默认值处理(通常是当前显示的第一个任务)。PID 值为零表示 top 程序本身。 默认的信号是 SIGTERM,但你可以发送任何信号,无论是通过数字还是名称。 如果你想中止终止过程,可以根据你的进展采取以下措施之一:

    • 在 PID 提示时,输入一个无效的数字

    • 在信号提示时,输入 0(或任何无效信号)

    • 在任何提示时,输入 <Esc>

  • q :退出 此命令用于退出 top 程序。

  • r :重置任务优先级 你将被提示输入一个 PID,然后是要设置的 nice 值。 如果没有输入 PID 或输入了负数,将按提示中显示的默认值处理(通常是当前显示的第一个任务)。PID 值为零表示 top 程序本身。 正数的 nice 值会导致进程失去优先级,而负数的 nice 值会使进程在内核中获得更好的处理。一般来说,普通用户只能提高 nice 值,不能降低。 如果你想中止重新设定优先级的过程,可以根据你的进展采取以下措施之一:

    • 在 PID 提示时,输入一个无效的数字

    • 在 nice 提示时,不输入任何内容直接按 <Enter>

    • 在任何提示时,输入 <Esc>

  • W :写入配置文件 此命令将保存你的所有选项和开关以及当前的显示模式和延迟时间。在退出 top 之前执行此命令,你可以在稍后重新启动时恢复到完全相同的状态。

  • X :额外的固定宽度 一些字段是固定宽度的,不可缩放。因此,它们可能会受到截断,这将通过在最后位置显示一个 + 表示。

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

    你将被提示输入要添加到上述默认宽度的数量。输入零将强制返回到这些默认值。 如果你输入一个负数,top 将自动增加列的大小,直到没有更多被截断的数据。通过减少延迟间隔或按住 <Space> 键可以加速这一过程。 注意:无论是显式还是自动增加,这些字段的宽度从未通过 top 减少。要缩小它们,你必须指定一个更小的数字或恢复默认设置。

  • Y :检查其他输出 发出 Y 交互命令后,你将被提示输入目标 PID。输入一个值或接受默认值后,将显示一个单独的屏幕。该屏幕可用于查看各种文件或管道命令输出,同时正常的 top 迭代显示将暂停。 注意:这个交

互命令只有在支持条目已手动添加到 top 配置文件末尾时才能完全实现。有关创建这些条目的详情,请参见主题 6c. 添加检查条目。 用于导航检查功能的大多数键在其标题序言中有所反映。然而,一旦你选择了特定的文件或命令,就有额外的键可用,这些键对任何使用过分页器 less 的人来说都很熟悉,并在此为将来参考进行了总结。

功能
=切换状态行,文件或管道
/查找,等同于 L 定位
n查找下一个,等同于 & 定位下一个
<Space>向下滚动,等同于 <PgDn>
b向上滚动,等同于 <PgUp>
g第一行,等同于 <Home>
G最后一行,等同于 <End>
  • Z :更改颜色映射 此键将带你进入一个单独的屏幕,在那里你可以更改“当前”窗口的颜色,或者更改所有窗口的颜色。有关此交互命令的详细信息,请参见主题 4d. 颜色映射。

注意:带星号 (*) 的命令在安全模式下不可用,也不会在一级帮助屏幕上显示。

摘要区命令

以下是摘要区域的交互命令,这些命令在全屏模式和交替显示模式下均可用。它们影响显示的开始几行,并将决定消息和提示的位置。

这些命令只影响“当前”窗口/字段组。有关“当前”窗口和字段组的更多信息,请参见主题 5. 交替显示规定和 g 交互命令。

  • C:显示滚动坐标切换 切换显示一个信息消息,该消息在消息行未被其他用途使用时显示。有关更多信息,请参见主题 5c. 滚动窗口。

  • l:负载平均值/运行时间切换 在全屏模式下,这也是包含程序名称(可能是别名)的行;在交替显示模式下,这是“当前”窗口名称的行。

  • t:任务/CPU 状态切换 此命令影响2行到多行摘要区域,具体取决于 123 命令切换的状态以及 top 是否在真正的 SMP 环境下运行。 摘要区域的这一部分也受到 H 交互命令切换的影响,如在总标签中显示的任务或线程。 此命令作为一个四向切换,循环通过以下模式:

    1. 详细的按类别百分比(默认)

    2. 简略的用户/系统和总百分比 + 条形图

    3. 简略的用户/系统和总百分比 + 块状图

    4. 关闭任务和 CPU 状态显示 在图形模式下操作时,当单独显示 CPU 或 NUMA 节点时,显示将更加有意义。有关更多信息,请参见下面的 123 命令。

  • m:内存/交换使用切换 此命令影响处理物理和虚拟内存的两行摘要区域。 此命令作为一个四向切换,循环通过以下模式:

    1. 详细的按内存类型百分比(默认)

    2. 简略的已用/总可用百分比 + 条形图

    3. 简略的已用/总可用百分比 + 块状图

    4. 关闭内存显示

  • 1:单独/分离 CPU 状态切换 此命令影响 t 命令的 CPU 状态部分的显示方式。尽管这个切换主要服务于大规模并行 SMP 机器,但它并不限于仅在 SMP 环境中使用。 当你在摘要区域看到 %Cpu(s): 时,1 切换开启,所有 CPU 信息汇总在单行显示。否则,每个 CPU 将分别显示为:%Cpu0, %Cpu1, ...,直到可用屏幕高度。

  • 2:NUMA 节点/CPU 概要切换 此命令在仅 CPU 概要显示(由 1 命令控制)和 CPU 使用统计加上每个 NUMA 节点的概要显示之间切换。只有在系统具备必要的 NUMA 支持时才可用。

  • 3:扩展 NUMA 节点 你将被邀请输入代表一个 NUMA 节点的数字。此后,将显示该节点的概要和该节点中每个 CPU 的统计信息,直到按下 12 命令切换。这个交互命令仅在系统具备必要的 NUMA 支持时可用。

注意:如果任何窗口的整个摘要区域被关闭,你将只剩下消息行。通过这种方式,你可以最大化可用的任务行,但(暂时)牺牲了全屏模式下的程序名称或交替显示模式下的“当前”窗口名称。

任务区命令

以下是任务区域交互命令的详细说明,这些命令在全屏模式下始终可用。

然而,如果“当前”窗口的任务显示已被关闭(参见主题 5. 交替显示规定),则在交替显示模式下这些任务区域的交互命令将不可用。

任务窗口的外观

  • J:数值列对齐切换 切换数值数据的对齐方式,可以在默认的右对齐和左对齐之间切换。如果数值数据完全填满了可用列,则此命令可能只影响列头。

  • j:字符列对齐切换 切换字符数据的对齐方式,可以在默认的左对齐和右对齐之间切换。如果字符数据完全填满了可用列,则此命令可能只影响列头。

以下命令也会受到全局 B(加粗启用)开关的影响。

  • b:粗体/反向切换 此命令将影响 xy 开关的显示方式。它也可能影响摘要区域,当通过 tm 开关为 CPU 状态或内存使用选择了条形图时。

  • x:列高亮切换 改变当前排序字段的高亮显示。如果你忘记了哪个字段正在被排序,此命令可以作为一个快速的视觉提醒,前提是排序字段正在显示。排序字段可能因为以下原因不可见:

    1. 屏幕宽度不足

    2. f 交互命令将其关闭

    注意:当窗口中激活搜索和/或其他过滤时,列高亮会临时禁用。详情请参见主题 5d. 搜索和 5e. 过滤的注释。

  • y:行高亮切换 改变“运行中”任务的高亮显示。有关此任务状态的更多信息,请参见主题 3a. 字段描述,S 字段(进程状态)。

    使用此功能可以提供有关系统健康状况的重要见解。唯一的成本是一些额外的 tty 转义序列。

  • z:颜色/单色切换 在您最后使用的颜色方案和较老的黑白或白黑模式之间切换“当前”窗口。此命令将改变摘要区域和任务区域,但不影响 xyb 开关的状态。

任务窗口的内容

  • c:命令行/程序名称切换 无论 COMMAND 列当前是否可见,此命令都将被执行。稍后,如果该字段出现在视图中,您应用的更改将可见。

  • f | F:字段管理 这些键将显示一个单独的屏幕,您可以在其中更改显示的字段、它们的顺序以及指定排序字段。有关这些交互命令的更多信息,请参见主题 3b. 管理字段。

  • o | O:其他过滤 您将被提示输入选择标准,然后决定哪些任务将在“当前”窗口中显示。您的标准可以设置为区分大小写或忽略大小写。您决定 top 是包含还是排除匹配的任务。

    有关这些以及相关交互命令的详细信息,请参见主题 5e. 窗口过滤。

  • S:累计时间模式切换 当累计模式开启时,每个进程将列出它及其死亡子进程所使用的 CPU 时间。

    关闭时,那些分叉为许多独立任务的程序将看起来需求较低。对于像 init 或 shell 这样的程序来说,这是合适的,但对于其他程序,如编译器,可能不适合。尝试使用两个任务窗口,它们共享相同的排序字段但具有不同的 S 状态,看看你更喜欢哪种表示方式。

    发出此命令后,将通知您此开关的新状态。如果您想提前知道累计模式是否生效,只需请求帮助并查看第二行的窗口摘要。

  • u | U:仅显示特定用户 您将被提示输入用户的 uid 或名称来显示。-u 选项匹配有效用户,而 -U 选项匹配任何用户(实际、有效、保存或文件系统用户)。

    此后,在该任务窗口中只会显示匹配的用户,或可能不显示任何进程。在用户 id 或名称前加感叹号 (’!’) 指示 top 仅显示与所提供用户不匹配的进程。

    不同的任务窗口可以用来过滤不同的用户。稍后,如果您希望在“当前”窗口中再次监控所有用户,重新发出此命令但在提示时直接按 <Enter>

  • V:森林视图模式切换 在此模式下,进程将根据它们的父进步重新排序,COMMAND 列的布局类似于树形结构。在森林视图模式下,仍然可以切换程序名称和命令行(参见 c 交互命令)或进程和线程(参见 H 交互命令)。

    注意:在“当前”窗口中,任何影响排序顺序的按键都将退出森林视图模式。

任务窗口的大小

  • i:空闲进程切换 显示所有任务或仅活跃任务。当此开关关闭时,自上次更新以来未使用任何 CPU 的任务将不会显示。然而,由于 %CPU 和 TIME+ 字段的粒度问题,一些看似未使用 CPU 的进程可能仍会显示。 如果在交替显示模式中此命令应用于最后一个任务显示,那么它将不会影响窗口的大小,因为所有之前的任务显示已经完成。

  • n | #:设置最大任务数 您将被提示输入要显示的任务数。将使用您输入的数字与可用屏幕行数中较小的一个。 在交替显示模式中使用时,此命令允许您精确控制每个当前可见任务显示的大小,除了最后一个。它不会影响最后一个窗口的大小,因为所有之前的任务显示已经完成。 注意:如果您希望在交替显示模式中增加最后一个可见任务显示的大小,只需减小其上方任务显示的大小。

任务窗口的排序

为了兼容性,这个版本的 top 支持大多数以前 top 版本的排序键。由于这主要是为了服务于固定的top user,这些命令不会出现在任何帮助屏幕上。

命令排序字段是否支持
A启动时间(非显示)
M%MEM
NPID
P%CPU
TTIME+

在使用以下排序规则之前,top 建议您临时使用 x 交互命令开启列高亮。这将有助于确保实际的排序环境符合您的意图。

以下交互命令仅在当前排序字段可见时才会生效。排序字段可能因为以下原因不可见:

  1. 屏幕宽度不足

  2. f 交互命令将其关闭

  • < :向左移动排序字段 除非当前排序字段是第一个显示的字段,否则将排序列向左移动。

  • > :向右移动排序字段 除非当前排序字段是最后一个显示的字段,否则将排序列向右移动。

以下交互命令无论当前排序字段是否可见都将始终被执行:

  • f | F :字段管理 这些键将显示一个单独的屏幕,您可以在其中更改用作排序列的字段,以及执行其他功能。当在列高亮关闭的情内下运行 top 时,这可以是一种简便的方式来验证当前的排序字段。

  • R :反向/正常排序字段切换 使用此交互命令,您可以在高到低和低到高的排序之间切换。

注意:字段排序使用内部值,而不是列显示中的值。因此,TTY 和 WCHAN 字段将违反严格的 ASCII 排序序列。

颜色映射

当您使用 Z 交互命令时,将出现一个单独的屏幕。您可以使用这个屏幕在返回顶部显示之前,仅更改“当前”窗口或所有四个窗口中的颜色。

以下交互命令可用:

  • 4个大写字母选择目标

  • 8个数字选择颜色

  • 常规切换可用

    • B:粗体禁用/启用

    • b:运行任务“粗体”/反转

    • z:颜色/单色

  • 其他可用命令

    • a/w:应用,然后前往下一个/前一个

    • <Enter>:应用并退出

    • q:放弃当前更改并退出

如果您使用 aw 来循环目标窗口,您将应用在离开该窗口时显示的颜色方案。当然,您可以轻松地返回任何窗口并重新应用不同的颜色,或者完全使用 z 切换关闭颜色。

颜色映射屏幕也可用于在全屏模式或交替显示模式下更改“当前”窗口/字段组。无论何时按下 q<Enter>,被定位的目标都将在您返回顶部显示时设为当前。

# 打开终端
# 启动top命令
top
​
# 在top运行时,按下 `Z` 进入颜色配置模式
# 选择颜色应用的区域,例如按 `A` 选择总体区域
# 使用数字 `1-8` 选择一个颜色
# 按 `<Enter>` 应用颜色并退出颜色设置
# 如果满意配置,可按 `W` 保存当前配置到用户的top配置文件中,通常是 ~/.toprc
​

交替显示设置

窗口概述

  • 字段组/窗口: 在全屏模式下,单一窗口代表整个屏幕。这个单一窗口仍然可以变更为显示4个不同的字段组之一(参见下文重复的g交互命令)。这四个字段组每个都有独立配置的摘要区域和其自己的可配置任务区域能力。

    在交替显示模式中,这四个底层字段组现在可以同时可见,或者可以根据您的命令单独关闭。

  • 当前窗口: “当前”窗口是与摘要区域和始终指向任务相关命令的窗口相关联的窗口。由于在交替显示模式中可以切换关闭任务显示,某些命令可能会限制用于“当前”窗口。

    当您切换关闭第一个摘要区域行时,会进一步复杂化。由于窗口名称(被l切换的行)的丢失,您将不容易知道哪个窗口是“当前”窗口。

窗口命令

  • - | _ :显示/隐藏窗口切换 -键会切换“当前”窗口的任务显示的开/关。开启时,任务区域至少会显示您通过f交互命令建立的列头。它也将反映您应用的任何其他任务区域选项/切换,可能显示零个或多个任务。

    _键对所有任务显示做同样的操作。换句话说,它在当前可见的任务显示和您之前切换关闭的任何任务显示之间切换。如果所有4个任务显示当前都是可见的,这个交互命令会使摘要区域成为唯一的显示元素。

  • = | + :均衡(重新初始化)窗口 =键强制使“当前”窗口的任务显示可见。它还将逆转可能激活的任何i(空闲任务)、n(最大任务)、u/U(用户过滤)和o/O(其他过滤)命令。此外,如果窗口已被滚动,它将通过此命令被重置。有关垂直和水平滚动的更多信息,请参见主题 5c. 滚动窗口。

    +键对所有窗口执行相同操作。四个任务显示将重新出现,均匀平衡。它们还将保留您之前应用的任何自定义设置,除了i(空闲任务)、n(最大任务)、u/U(用户过滤)、o/O(其他过滤)和滚动交互命令。

  • A :交替显示模式切换 此命令将在全屏模式和交替显示模式之间切换。

    第一次使用此命令时,所有四个任务显示将被显示。此后当您切换模式时,您将只看到您选择使其可见的任务显示。

  • a | w :向前/向后下一个窗口 这将更改“当前”窗口,从而更改指向哪个窗口的命令。这些键以循环方式作用,因此您可以使用任一键达到任何期望的窗口。

    假设窗口名称可见(您没有切换关闭l),每当“当前”窗口名称失去其强调/颜色时,这是一个提醒任务显示已关闭,许多命

令将受到限制。

  • g :选择另一个窗口/字段组 您将被提示输入一个数字(1到4之间),指定应该成为“当前”窗口的字段组。

    在全屏模式下,此命令是必要的以更改“当前”窗口。在交替显示模式下,它只是aw命令的一个不太方便的替代品。

  • G :更改窗口/字段组名称 您将被提示输入一个新名称,应用于“当前”窗口。不需要窗口名称可见(l切换开启)。

  • 星号(*)标记的交互命令在交替显示模式之外也有用途。

    • =, A, g 总是可用

    • a, w 在颜色映射和字段管理中作用相同

滚动窗口

通常,任务窗口是系统所有任务/线程的部分视图,只显示部分可用字段/列。使用这些滚动键,您可以垂直或水平移动视图,以揭示任何期望的任务或列。

  • Up,PgUp :向上滚动任务 将视图向上移动至第一个任务行,直到第一个任务在“当前”窗口的顶部显示。Up箭头键移动单行,而PgUp滚动整个窗口。

  • Down,PgDn :向下滚动任务 将视图向下移动至最后一个任务行,直到最后一个任务在“当前”窗口的顶部显示。Down箭头键移动单行,而PgDn滚动整个窗口。

  • Left,Right :滚动列 一次一列地水平移动可显示字段的视图。

    注意:作为提醒,某些字段/列不是固定宽度,而是在可见时分配所有剩余屏幕宽度。当向左或向右滚动时,这个特性最初可能产生一些意外结果。

此外,当位于最后显示字段的任何可变宽度字段通过右箭头键达到,并因此成为唯一显示的列时,您可以继续在此类字段内水平滚动。有关更多信息,请参见下面的C交互命令。

  • Home :跳转到首页位置 将显示重置为未滚动的坐标。

  • End :跳转到末尾位置 重新定位显示,以便最右侧的列反映最后一个可显示字段,底部任务行代表最后一个任务。

    注意:从这个位置开始,仍然可以使用箭头键向下和向右滚动。这是真实的,直到单个列和单个任务成为唯一的显示元素。

  • C :显示滚动坐标切换 切换显示一个信息消息,该消息在消息行未被其他用途使用时显示。该消息将取决于是否有可变宽度列也被滚动的两种形式之一。

滚动坐标信息显示为以下两种形式之一,取决于是否有可变宽度列同时被滚动:

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

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

这里显示的坐标n/n是相对于“当前”窗口的左上角的。额外的+ nn表示当可变宽度列水平滚动时的位移。这种位移通常按正常的8字符制表位通过左右箭头键实现。

  • y = n/n(任务) 第一个n代表顶部可见的任务,并由滚动键控制。第二个n会自动更新以反昼总任务数。

  • x = n/n(字段) 第一个n代表最左侧显示的列,并由滚动键控制。第二个n是可显示字段的总数,通过f交互命令设定。

窗口中的搜索

您可以使用这些交互命令在包含特定值的任务行中定位。

  • L:定位字符串 您将被提示输入从当前窗口坐标开始的区分大小写的字符串以进行定位。搜索字符串的内容没有限制。

    搜索不限于单个字段或列的值。任务行中显示的所有值都允许在搜索字符串中。您可以包括空格、数字、符号甚至森林视图艺术。

    不输入任何内容直接按<Enter>将有效地禁用&键,直到输入新的搜索字符串。

  • &:定位下一个 假设已经设定了搜索字符串,top 将尝试定位下一个出现的匹配项。

    当找到匹配项时,当前窗口将垂直重新定位,以便包含该字符串的任务行首先显示。滚动坐标消息可以确认这种垂直重新定位(参见C交互命令)。然而,水平滚动永远不会通过搜索改变。

    匹配字符串的可用性将受以下因素影响:

    a. 从总可用字段中哪些字段是可显示的,参见主题3b. 管理字段。 b. 垂直和/或水平滚动窗口,参见主题5c. 滚动窗口。 c. 命令/命令行切换的状态,参见c交互命令。 d. 选定排序列的稳定性,例如PID是好的,但%CPU不好。

    如果搜索失败,恢复“当前”窗口的家庭(未滚动)位置、水平滚动、显示命令行或选择更稳定的排序字段可能仍然可以成功执行&搜索。

窗口中的过滤

您可以使用此其他过滤功能建立选择标准,这将决定在“当前”窗口中显示哪些任务。建立过滤器需要:1) 字段名称;2) 操作符;3) 选择值,作为最低要求。这是top的用户输入要求中最复杂的,因此,当您犯错误时,命令回调将是您的好帮手。在被提示输入时记得使用上/下箭头键或它们的别名。

  • 过滤基础

    1. 字段名称区分大小写,并且拼写如标题所示。

    2. 选择值不需要包括显示字段的完整内容。

    3. 选择可以是对大小写敏感的,也可以不敏感。

    4. 默认为包含,前置!表示排除。

    5. 可以将多个选择标准应用于一个

任务窗口。

  1. 包含和排除标准可以同时使用。

  2. 可以自由混合使用1个等值和2个关系过滤器。

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

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

键盘摘要

  • o :其他过滤器(小写) 你将被提示建立一个在匹配时忽略大小写的过滤器。

  • O :其他过滤器(大写) 你将被提示建立一个区分大小写的过滤器。

  • ^O :显示活动过滤器(Ctrl键 + o) 这可以作为一个提醒,显示在“当前”窗口中哪些过滤器是活动的。摘要将在消息行上显示,直到你按下<Enter>键。

  • = :在当前窗口重置过滤 这将清除“当前”窗口中的所有选择标准。它还有额外的影响,请参见主题4a。全局命令。

  • + :在所有窗口重置过滤 这将清除所有窗口中的选择标准,假设你处于交替显示模式。与=交互命令一样,它也有额外的后果,因此你可能希望参见主题5b。窗口命令。

输入要求

当被提示输入选择标准时,你提供的数据必须采取以下两种形式之一。有3个必需的信息部分,还有一个可选部分。以下示例中使用空格以便清晰,但你的输入通常不会包括它们。

  • #1 #2 #3 (必需)

  • 字段名称 ? 包含-if-value

  • ! 字段名称 ? 排除-if-value

  • #4 (可选)

项目 #1、#3 和 #4 应该是不言自明的。项目 #2 代表一个必需的分隔符和必须是等式(=)或关系(<>)之一的操作符。

  • = 等式操作符只需要部分匹配,这可以减少你的if-value输入要求。><关系操作符始终使用字符串比较,即使是在数字字段上。它们旨在与字段的默认对齐和同质数据一起工作。当某些字段的数字量已经被缩放而其他字段没有时,这些数据不再是同质的。

  • 如果你建立了一个关系过滤器,并且你改变了默认的数字或字符对齐,那么这个过滤器可能会失败。当关系过滤器应用于内存字段且你没有改变缩放时,它可能产生误导性结果。例如,因为100.0m(MiB)在字符串比较中会看起来大于1.000g(GiB)。

  • 如果你的过滤结果看起来可疑,简单地改变对齐或缩放可能仍然可以实现期望的目标。有关更多信息,请参见jJe交互命令。

潜在问题

  • 这些GROUP过滤器可能产生完全相同的结果,或者第二个可能根本不显示任何内容,只是一个空白的任务窗口。

    • GROUP=root (仅当)

    • GROUP=ROOT (通过小写o调用时)

  • 这些RES过滤器可能会根据当前的内存缩放因子产生不一致和/或误导性结果。或者两个过滤器可能产生完全相同的结果。

    • RES>9999 (仅当)

    • !RES<10000 (内存缩放在KiB时)

  • 这个nMin过滤器说明了可缩放字段的独特问题。这个特定字段最多可以显示4位数字,超过这个值的数字将自动缩放到KiB或更高。因

文件

系统配置文件

系统配置文件的存在将影响显示给普通用户的帮助屏幕版本。更重要的是,它将限制普通用户在运行top时能够执行的操作。他们将无法执行以下命令:

  • k:杀死一个任务

  • r:重新设置任务优先级

  • d 或 s:改变延迟/休眠间隔

系统配置文件不是由top创建的。相反,你需要手动创建这个文件并将其放置在/etc目录中。它的名称必须是toprc,且前面不能有.(点)。它必须只有两行。

这里是/etc/toprc内容的一个示例:

  • s:# 第1行:安全模式开关

  • 5.0:# 第2行:延迟间隔(秒)

个人配置文件

这个文件被写作$HOME/.your-name-4-top + rc。使用W交互命令来创建或更新它。

这里是一般布局:

  • global:# 第1行:程序名/别名表示

  • ":# 第2行:id, altscr, irixps, delay, curwin

  • per ea:# 第a行:winname, fieldscur

  • window:# 第b行:winflags, sortindx, maxtasks, graph modes

  • ":# 第c行:summclr, msgsclr, headclr, taskclr

  • global:# 第15行:其他杂项设置

  • ":# 任何剩余行都致力于

  • ":# 通用检查规定

  • ":# 下面讨论

如果$HOME变量不存在,top将尝试将个人配置文件写入当前目录,前提是有权限。

添加检查条目

要利用Y交互命令,你必须在top个人配置文件的末尾添加条目。这些条目简单地反映了要读取的文件或要执行的命令/管道,其结果随后将显示在一个单独的可滚动、可搜索的窗口中。

如果你不知道你的top rcfile的位置或名称,请使用W交互命令重写它并注意这些细节。

检查条目可以通过重定向echo添加,或通过编辑配置文件添加。重定向echo有覆盖rcfile的风险,应该是追加(>>)而不是替换(>)。相反,使用编辑器时必须注意不要破坏现有行,其中一些将包含不可打印的数据或不寻常的字符。

这些以#字符开头的检查条目将被忽略,无论内容如何。否则它们由以下3个元素组成,每个元素之间必须用一个制表符字符(总共2个\t)分隔:

  • .type:字面上的filepipe

  • .name:在检查屏幕上显示的选择

  • .fmts:表示路径或命令的字符串

检查条目的两种类型不可互换。指定为file的将使用fopen访问,必须在.fmts元素中引用单个文件。指定为pipe的将使用popen,它们的.fmts元素可以包含许多管道命令,并且不能是交互式的。

如果你的.fmts文件或管道涉及到特定的PID输入或接受提示,则格式字符串还必须包含%d说明符,如下示例所示:

  • .fmts = /proc/%d/numa_maps

  • .fmts = lsof -P -p %d

对于pipe类型条目

,你还可能希望将stderr重定向到stdout以获得更全面的结果。因此格式字符串变为:

  • .fmts = pmap -x %d 2>&1

这里是rcfile中可能出现的两种类型的检查条目示例。第一个条目由于初始#字符将被忽略。为了清晰,伪制表符表示(^I)被额外的空格包围,但实际的制表符不会这样。

  • # pipe ^I Sockets ^I lsof -n -P -i 2>&1

  • pipe ^I Open Files ^I lsof -P -p %d 2>&1

  • file ^I NUMA Info ^I /proc/%d/numa_maps

  • pipe ^I Log ^I tail -n100 /var/log/syslog | sort -Mr

除了上面评论的条目外,以下示例显示了如何通过echo来实现类似结果,假设rcfile名称是.toprc。然而,由于嵌入的制表符字符,每个这样的行应该以/bin/echo -e开始,而不仅仅是一个简单的echo,以无论使用哪种shell都启用反斜杠解释。

  • “pipe\tOpen Files\tlsof -P -p %d 2>&1” >> ~/.toprc

  • “file\tNUMA Info\t/proc/%d/numa_maps” >> ~/.toprc

  • “pipe\tLog\ttail -n200 /var/log/syslog | sort -Mr” >> ~/.toprc

注意:如果你创建的任何检查条目产生了带有不可打印字符的输出,这些字符将根据它们的值以^C符号或十六进制<FF>形式显示。这也适用于制表符,它们将显示为^I。如果你想要更真实的表示,任何嵌入的制表符都应该被展开。

  • 下一个示例原本可能包含了\t

  • # file ^I <your_name> ^I /proc/%d/status

  • 但这将消除嵌入的\t

  • pipe ^I <your_name> ^I cat /proc/%d/status | expand -

上述示例展示了原本可能被作为file条目的内容,但改为使用pipe以展开嵌入的制表符。

注意:虽然讨论了pipe类型条目的管道和命令,但没有什么能阻止你包括shell脚本。也许甚至是为Y交互命令专门设计的新脚本。

最后,随着你的检查条目数量随时间增长,当屏幕宽度超过时,“Options:”行将被截断。这不影响操作,只是使某些选择不可见。

然而,如果一些选择因截断而丢失,但你希望看到更多选项,下面的提示提供了一个简单的解决方案。

  • 检查暂停在pid…

  • 使用:左/右然后<Enter>

  • Options: help 1 2 3 4 5 6 7 8 9 10 11 …

top rcfile中的条目将为.name元素有一个数字,而help条目将识别你编写的一个shell脚本,解释这些编号选择实际意味着什么。通过这种方式,可以使更多选择变得可见。