top - 显示 Linux 进程
概要
top [选项]
描述
top 程序提供运行系统动态实时视图。它可以显示系统摘要信息以及 Linux 内核当前管理的所有进程或线程列表。显示的系统摘要信息类型以及进程的类型、顺序和大小均可由用户配置,并且该配置可以在重启后保持不变。
该程序提供了一个有限的交互式界面,用于进程操作,以及一个更加广泛的界面,用于个人配置——涵盖其所有方面的操作。而且,虽然本文档中始终将程序称为 top,但您可以随意命名该程序。这个新名称,可能是别名,将在 top 的显示中反映出来,并在读取和写入配置文件时使用。
概述
文档
剩余的目录
概述
操作
Linux 内存类型
命令行选项
摘要显示
UPTIME 和 LOAD 平均值
任务和 CPU 状态
内存使用情况
字段/列显示
字段的描述
管理字段
交互式命令
全局命令
摘要区域命令
任务区域命令
外观
内容
大小
排序
颜色映射
备用显示配置
窗口概述
窗口命令
滚动窗口
在窗口中搜索
在窗口中筛选
文件
个人配置文件
添加 INSPECT 条目
系统配置文件
系统限制文件
环境变量
实用技巧示例
内核魔法
弹跳窗口
大鸟窗口
旧的换位游戏
错误,10. 请参阅
操作
运行 top 时,最重要的两个键是帮助 (h 或 ?) 键和退出 (`q') 键。或者,您可以简单地使用传统的中断键 (^C),当你完成后。
首次启动时,你将看到主 top 屏幕上呈现以下传统元素:1) 摘要区域;2) 字段/列标题;3) 任务区域。以下各部分将介绍这些内容。输入/消息行位于摘要区域和列标题之间,无需进一步说明。
主 top 屏幕通常可以很好地适应 XWindows 下终端尺寸的变化。其他 top 屏幕的适应性可能较差,尤其是那些包含静态文本的屏幕。但是,这最终取决于你特定的窗口管理器和终端模拟器。在某些情况下,它们对终端大小和当前内容的视图可能与 top 的视图不同,而 top 始终基于操作系统调用。
在任何调整大小的操作之后,如果顶部屏幕损坏、不完整或无序,只需输入一些无害的内容,例如标点符号或光标移动键,通常即可恢复。在极端情况下,以下序列几乎肯定有效:
键/命令 目标
^Z 暂停 top
fg 恢复 top
如果显示仍然损坏,您可以尝试最后一步。在 top 暂停后但在恢复它之前插入以下命令。 键/命令 目标 reset 恢复您的终端设置
注意:top 的显示宽度将限制为 512 个位置。显示所有字段大约需要 250 个字符。剩余的屏幕宽度通常分配给任何当前可见的可变宽度列。可变宽度列,例如 COMMAND,在主题 3a 中说明。字段的描述。实际输出宽度也可能受到 -w 开关的影响,该开关在主题 1 中讨论。命令行选项。
最后,top 的某些屏幕或功能需要使用光标移动键,例如标准的箭头键以及 Home、End、PgUp 和 PgDn 键。如果您的终端或模拟器不提供这些键,则可以接受以下组合作为替代方案: 键 等效键 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
当提示输入以
Linux 内存类型
就我们的目的而言,有三种类型的内存,其中一种是可选的。第一种是物理内存,这是一种有限的资源,代码和数据必须在执行或引用时位于其中。接下来是可选的交换文件,其中可以保存已修改(脏)的内存,并在对物理内存的需求过多时稍后检索它。最后,我们有虚拟内存,这是一种几乎无限的资源,用于实现以下目标:
抽象,摆脱物理内存地址/限制
隔离,每个进程都在单独的地址空间中
共享,单个映射可以满足多个需求
灵活性,将虚拟地址分配给文件
无论内存以何种形式存在,所有内存都以页的形式管理(通常为 4096 字节),但默认情况下,top 显示的是 KiB(千字节)。在主题 2c. 内存使用情况 中讨论的内存是指系统整体的物理内存和交换文件。在主题 3. 字段/列显示 中查看的内存包括所有三种内存类型,但针对单个进程。
对于每个进程,每个内存页都限制在以下表格中的单个象限内。物理内存和虚拟内存都可以包括所有四个象限,而交换文件仅包括 #1 到 #3。位于第四象限的内存,在被修改时,会充当其自身的专用交换文件。
私有 | 共享 1 | 2 匿名 . 堆栈 | . malloc() | . brk()/sbrk() | . POSIX shm* . mmap(PRIVATE, ANON) | . mmap(SHARED, ANON) -----------------------+---------------------. mmap(PRIVATE, fd) | . mmap(SHARED, fd) 文件支持 . 程序/共享库 | 3 | 4
以下内容可能有助于解释在可缩放列中显示的进程级别内存值,并在主题 3a. 字段描述 中讨论。
^ MEM - 只是 RES 除以总物理内存
^ ODE - 第三个象限的 pgms 部分
^ ATA - 整个第一个象限的 VIRT 部分,以及所有显式 mmap 文件支持的页面(第三个象限)
^ ES - 占用物理内存的任何内容,从 Linux-4.5 开始,是以下三个字段的总和:
^ San - 第一个象限的页面,包括任何来自第三个象限的已修改页面
^ Sfd - 第三个和第四个象限的页面
^ Ssh - 第二个象限的页面
^ Slk - RES 的子集,不能交换到磁盘(任何象限)
^ HR - RES 的子集(不包括 1,包括所有 2 和 4,以及部分 3)
^ WAP - 可能是除了 4 之外的任何象限
^ SED - 只是 RES 和 SWAP 的总和
^ IRT - 所有正在使用和/或保留的内存(所有象限)
注意:即使程序映像和共享库被认为是进程私有的,内核也会将其计为共享 (SHR)。
命令行选项 长选项的必需参数对于短选项也是必需的。
虽然不是必需的,但可以使用等号与任一选项形式一起使用,并且允许在 = 之前和/或之后使用空格。
^ b, --batch
以批处理模式启动 top,这对于将 top 的输出发送到其他程序或文件可能很有用。在这种模式下,top 不会接受输入,并且会运行直到您使用 -n 命令行选项设置的迭代限制或直到被终止。
^ c, --cmdline-toggle
以相反的最后一个记忆状态启动 top。因此,如果 top 正在显示命令行,那么该字段现在将显示程序名称,反之亦然。有关更多信息,请参见交互式命令 c。
^ d, --delay = SECS [.TENTHS]
指定屏幕更新之间的延迟,并覆盖个人配置文件或启动默认值中对应的延迟。稍后可以使用交互式命令 d 或 s 更改此设置。
-t, --time-toggle
切换显示时间/CPU使用率。默认情况下,顶端会显示自上次更新以来的绝对时间。使用此选项可以切换到显示自上次更新以来的 CPU 使用率。之后可以通过交互式命令 't' 切换。
-u, --user-toggle
切换显示用户/进程名称。默认情况下,顶端会显示用户的用户名。使用此选项可以切换到显示进程的名称。之后可以通过交互式命令 'u' 切换。
-U, --uppercase
以大写字母显示顶端。
-V, --version
显示版本信息,然后退出。
-w, --wrap-around
在输出中启用换行。
-x, --kill-signal = SIGNALNAME
当用户通过交互式命令 'k' 发送信号时,使用指定的信号名称。
-x, --kill-signal = SIGNAL
当用户通过交互式命令 'k' 发送信号时,使用指定的信号。
-y, --delay = SECONDS
设置顶端更新两次之间的秒数。小数也是允许的,但不允许使用负数。在所有情况下,如果 top 在安全模式下运行,则禁止进行此类更改,除非是 root 用户(除非使用了命令行选项 's')。有关安全模式的更多信息,请参阅主题 6d。系统限制文件。
-E, --scale-summary-mem = k | m | g | t | p | e
指示 top 将摘要区域的内存强制缩放到以下单位:
k - 千字节
m - 兆字节
g - 吉字节
t - 特拉字节
p - 拍字节
e - 艾字节
之后可以通过交互式命令 'E' 切换。
-e, --scale-task-mem = k | m | g | t | p
指示 top 将任务区域的内存强制缩放到以下单位:
k - 千字节
m - 兆字节
g - 吉字节
t - 特拉字节
p - 拍字节
之后可以通过交互式命令 'e' 切换。
-H, --threads-show
指示 top 显示单个线程。如果没有此命令行选项,则将显示每个进程中所有线程的总和。之后可以通过交互式命令 'H' 切换。
-h, --help
显示使用帮助文本,然后退出。
-i, --idle-toggle
以上次记住的 'i' 状态的相反状态启动 top。当此切换设置为“关闭”时,自上次更新以来未消耗任何 CPU 的任务将不会显示。有关此切换的更多信息,请参阅主题 4c。任务区域命令,大小。
-n, --iterations = NUMBER
指定 top 在结束之前应生成的最大迭代次数(或帧数)。
-O, --list-fields
此选项充当选项 -o 的一种帮助形式,如下所示。它将导致 top 打印每个可用字段名,每个字段名一行,然后退出。这些名称可能受到 NLS(国家/地区语言支持)翻译的影响。
-o, --sort-override = FIELDNAME
指定任务将根据哪个字段进行排序,与配置文件中反映的内容无关。您可以在字段名前面加上 '+' 或 '-',以覆盖排序方向。前缀 '+' 将强制按从高到低的顺序排序,而 '-' 将确保按从低到高的顺序排序。
此选项主要用于支持自动化/脚本化的批处理模式操作。
-p, --pid = PIDLIST(格式:1,2,3,... 或 -p1 -p2 -p3...)
仅监视具有指定进程 ID 的进程。但是,当与线程模式('H')结合使用时,线程组(参见 TGID)中每个监视的 PID 中的所有进程也将显示。
此选项最多可以提供 20 次,或者您可以提供一个逗号分隔的列表,最多包含 20 个 PID。两种方法都可以混合使用。
PID 值为零将被视为 top 程序本身的进程 ID,一旦它开始运行。
这是一个命令行选项,如果您希望返回到正常操作,则无需退出并重新启动 top——只需发出以下任何交互式命令:'='、'u' 或 'U'。
^ `、u和U` 命令行选项是相互排斥的。
-S, --accum-time-toggle
以上次记住的 `S` 状态的反转状态启动 top。当累积时间模式开启时,每个进程都将列出其自身及其已终止子进程所使用的 CPU 时间。有关此模式的更多信息,请参阅 `S` 交互式命令。
-s, --secure-mode
强制以安全模式启动 top,即使对于 root 用户也是如此。这种模式最好通过系统配置文件进行控制(请参阅主题 6:文件)。
-U, --filter-any-user = USER (形式:数字或名称)
仅显示用户 ID 或用户名与给定用户匹配的进程。此选项匹配任何用户(实际用户、有效用户、已保存用户或文件系统用户)。
在用户 ID 或名称前附加一个感叹号 (`!`),指示 top 仅显示与提供的用户不匹配的进程。
^ `、U和u` 命令行选项是相互排斥的。
-u, --filter-only-euser = USER (形式:数字或名称)
仅显示用户 ID 或用户名与给定用户匹配的进程。此选项仅匹配有效用户 ID。
在用户 ID 或名称前附加一个感叹号 (`!`),指示 top 仅显示与提供的用户不匹配的进程。
^ `、U和u` 命令行选项是相互排斥的。
-V, --version
显示版本信息,然后退出。
-w, --width [=COLUMNS]
在批处理模式下,如果不带参数使用,top 将使用 `COLUMNS=` 和 `LINES=` 环境变量格式化输出(如果已设置)。否则,宽度将固定为最大 512 列。如果带参数使用,可以减少或增加输出宽度(最多 512 列),但行数被视为不受限制。
在正常显示模式下,如果不带参数使用,top 将尝试使用 `COLUMNS=` 和 `LINES=` 环境变量格式化输出(如果已设置)。如果带参数使用,则只能减少输出宽度,不能增加。无论是使用环境变量还是带有 `-w` 参数,当不在批处理模式下时,实际的终端尺寸永远不会被超过。
注意:如果没有使用此命令行选项,则输出宽度始终基于启动 top 的终端,无论是否处于批处理模式。
-1, --single-cpu-toggle
以上次记住的 CPU 状态部分的摘要区域的反转状态启动 top。摘要区域的 CPU 信息将以单行显示,或者每个 CPU 将单独显示,具体取决于 NUMA 节点命令切换的状态 (`2`)。
请参阅 `1` 和 `2` 交互式命令,以获取更多信息。
摘要显示
以下三个区域中的每一个都可以通过一个或多个交互式命令单独控制。请参阅主题 4b:摘要区域命令,以获取有关这些设置的更多信息。
启动时间和负载平均值
此部分由一行组成,其中包含:
程序或窗口名称,具体取决于显示模式
当前时间和上次启动后的时长
用户总数
过去 1、5 和 15 分钟的系统负载平均值
任务和 CPU 状态
这部分至少包含两行。在 SMP 环境中,可以添加更多行以反映各个 CPU 的状态百分比。
第一行显示总任务数或线程数,具体取决于“线程模式”切换的状态。该总数进一步分为: 运行中;睡眠中;停止;僵尸进程
第二行显示 CPU 状态百分比,基于上次刷新后的时间间隔。
默认情况下,会显示这些单个类别的百分比。根据您的内核版本,st 字段可能不会显示。
us:运行未调整优先级的用户进程所用的时间
sy:运行内核进程所用的时间
ni:运行已调整优先级的用户进程所用的时间
id:内核空闲处理程序所用的时间
wa:等待 I/O 完成所用的时间
hi:服务硬件中断所用的时间
si:服务软件中断所用的时间
st:虚拟机管理程序从该虚拟机窃取的时间
上面的 sy 值还反映了运行虚拟 CPU 的时间,包括已调整优先级的虚拟 CPU,用于运行客户操作系统。
在第一行“任务/线程”之后,可以通过 4way t 命令切换来使用替代的 CPU 显示模式。它们显示一个简化的摘要,包括以下元素:
a b c d
%Cpu(s): 75.0/25.0 100[ ... ]
其中:a) 是“用户”(us + ni) 百分比;b) 是“系统”(sy + hi + si + guests) 百分比;c) 是总百分比;d) 是这两个表示中的其中一种视觉图表。这些图表也反映了单独的“用户”和“系统”部分。
如果使用“4”命令切换来显示每行多于两个 CPU,结果将进一步缩减,消除 a) 和 b) 元素。但是,如果启用了颜色显示,或者如果没有启用颜色显示,则显示条形图而不是块,则该信息仍然反映在图形中。
请参阅主题 4b,“摘要区域命令”,了解有关 t 和 4 命令切换的更多信息。
内存使用情况
这部分包含两行,可以以千字节 (KiB) 到艾字节 (EiB) 的单位显示值,具体取决于通过 E 交互式命令强制执行的缩放因子。/proc/meminfo 源字段显示在括号中。
第一行反映物理内存,分类如下: 总计 (MemTotal) 可用 (MemFree) 已用 (MemTotal - MemAvailable) 缓冲区/缓存 (Buffers + Cached + SReclaimable)
第二行主要反映虚拟内存,分类如下: 总计 (SwapTotal) 可用 (SwapFree) 已用 (SwapTotal - SwapFree) 可用 (MemAvailable,即物理内存)
第二行中的“可用”数字是对物理内存的估计,可用于启动新应用程序,而无需进行交换。与“可用”字段不同,它尝试考虑可立即回收的页面缓存和内存块。它在内核 3.14 上可用,在内核 6.27+ 上进行模拟,否则与“可用”字段相同。
在替代的内存显示模式中,将显示两个简短的摘要行,它们由以下元素组成: a b c GiB Mem : 18.7/15.738 [ ... ] GiB Swap: 0.0/7.999 [ ... ]
其中:a) 是已用百分比;b) 是总可用量;c) 是上述两种表示形式中的一个视觉图形。
对于物理内存,百分比表示总数减去上述估计的可用量。Mem' 图本身分为已用(非缓存)部分和任何未被avail占用的剩余内存。请参阅主题 4b,SUMMARY AREA Commands,以及m` 命令,以获取有关该特殊四向切换的更多信息。
下表可能有助于解释显示的缩放值: KiB = 千字节 = 1024 字节 MiB = 兆字节 = 1024 KiB = 1,048,576 字节 GiB = 吉字节 = 1024 MiB = 1,073,741,824 字节 TiB = 太字节 = 1024 GiB = 1,099,511,627,776 字节 PiB = 佩字节 = 1024 TiB = 1,125,899,906,842,624 字节 EiB = 艾字节 = 1024 PiB = 1,152,921,504,606,846,976 字节
字段/列
字段描述
下面列出了 top 可用的进程字段(列)。它们以严格的 ASCII 字母顺序显示。您可以使用 f(字段管理)交互式命令自定义它们的位置以及是否显示它们。
任何字段都可以选择作为排序字段,并且您可以控制它们是按从高到低还是从低到高排序。有关排序配置的更多信息,请参阅主题 4c,TASK AREA Commands,SORTING。
与物理内存或虚拟内存相关的字段引用的是 (KiB),这是未添加后缀的显示模式。但是,这些字段可以从 KiB 扩展到 PiB。该缩放受到 e 交互式命令的影响,或者通过构建选项在启动时进行设置。
%CPU -- CPU 使用率
任务自上次屏幕更新以来所占用的 CPU 时间份额,以总 CPU 时间的百分比表示。
在真正的 SMP 环境中,如果一个进程是多线程的,并且 top 并非在线程模式下运行,则可能会报告大于 100% 的值。您可以使用 H 交互式命令切换线程模式。
此外,对于多处理器环境,如果 Irix 模式关闭,top 将以 Solaris 模式运行,在这种模式下,任务的 CPU 使用率将除以 CPU 的总数。您可以使用 I 交互式命令切换 Irix/Solaris 模式。
注意:在以树状视图模式 (`V`) 运行,且子进程折叠 (`v`) 时,该字段还将包括这些未显示的子进程的 CPU 时间。请参阅主题 4c,TASK AREA Commands,CONTENT,以获取有关 `V` 和 `v` 切换的更多信息。
%CUC -- CPU 利用率
该字段与下面的 %CUU 字段相同,不同之处在于,该百分比还反映了已结束的子进程。
%CUU -- CPU 利用率
任务的总 CPU 使用量除以其运行的经过时间,以百分比表示。
如果某个进程当前显示出很高的 CPU 使用率,该字段可以帮助确定这种行为是否正常。相反,如果某个进程当前具有较低的 CPU 使用率,则 %CUU 可能反映了其生命周期中历史上更高的需求。
%MEM -- 内存使用率 (RES)
任务当前占用的可用物理内存份额。
请参阅“概述,Linux 内存类型”,以获取更多详细信息。
AGID -- 自动组标识符
与进程关联的自动组标识符。此功能与 CFS 调度程序结合使用,以提高交互式桌面性能。
当 /proc/sys/kernel/sched\_autogroup\_enabled 设置为 1 时,将为每个新会话创建一个新的自动组(请参阅 SID)。该会话中随后分叉的所有进程都将继承该自动组的成员资格。然后,内核尝试均衡跨这些组的 CPU 周期分配。因此,具有许多 CPU 密集型进程的自动组(例如 make -j)不会支配只有一个或两个进程的自动组。
当显示为 -1 时,表示此信息不可用。
AGNI -- 自动组 Nice 值
自动组 Nice 值,它会影响组中所有进程的调度。负 Nice 值表示更高的优先级,而正 Nice 值表示更低的优先级。
CGNAME -- 控制组名称
进程所属的控制组的名称,如果该进程不适用,则为“-”。
这通常是完整控制组列表中的最后一个条目,如以下标题(CGROUPS)所示。而且,与那里一样,此字段也是可变宽度。
CGROUPS -- 控制组
进程所属的控制组的名称,如果该进程不适用,则为“-”。
控制组提供了一种在安装定义的进程组之间分配资源(CPU、内存、网络带宽等)的方法。它们可以对分配、拒绝、优先排序、管理和监视这些资源进行细粒度控制。
系统上可以同时存在多个不同的 cgroup 层次结构,并且每个层次结构都附加到一个或多个子系统。一个子系统代表一个单一资源。
注意:与大多数列不同,CGROUPS 字段不是固定宽度的。在显示时,它以及任何其他可变宽度列都将分配所有剩余屏幕宽度(最多 512 个字符)。即使这样,这些可变宽度字段仍然可能被截断。请参阅主题 5c,“滚动窗口”,以获取有关访问任何被截断数据的更多信息。
CODE -- 代码大小(KiB)
当前用于可执行代码的物理内存量,也称为文本常驻集大小或 TRS。
请参阅“概述,Linux 内存类型”,以获取更多详细信息。
COMMAND -- 命令名称或命令行
显示用于启动任务的命令行或关联程序的名称。您可以使用“c”在命令行和名称之间切换,该命令既是命令行选项,也是交互式命令。
当您选择显示命令行时,没有命令行的进程(例如内核线程)将仅显示程序名称,如本示例所示: [kthreadd]
此字段也可能受到森林视图显示模式的影响。请参阅“V”交互式命令,以获取有关该模式的更多信息。
请注意:COMMAND 字段与其他大多数列不同,它不是固定宽度的。当显示时,它加上任何其他可变宽度列将分配所有剩余的屏幕宽度(最多 512 个字符)。即便如此,此类可变宽度字段仍可能发生截断。当显示命令行(“c”交互式命令)时,尤其如此。请参阅主题 5c,“滚动窗口”,以获取有关访问任何已截断数据的更多信息。
DATA -- 数据 + 堆栈大小(KiB)
进程保留的专用内存量。它也称为数据驻留集 (DRS)。此类内存可能尚未映射到物理内存(RES),但始终包含在虚拟内存(VIRT)中。
请参阅“概述,Linux 内存类型”,以获取更多详细信息。
ELAPSED -- 经过的运行时间
自进程启动以来的时间长度。因此,最近启动的任务将显示最小的时间间隔。
该值将表示为“HH,MM”(小时,分钟),但如果间隔变得太大而无法适应列宽,则可能会进行额外的缩放。此时,它将被缩放为“DD+HH”(天+小时),甚至更多。
ENVIRON -- 环境变量
显示各个进程所看到的所有环境变量。这些变量将以其原始的本地顺序显示,而不是您习惯在不加限定符的“set”命令中看到的排序顺序。
请注意:ENVIRON 字段与其他大多数列不同,它不是固定宽度的。当显示时,它加上任何其他可变宽度列将分配所有剩余的屏幕宽度(最多 512 个字符)。即便如此,此类字段仍可能发生截断。当显示环境变量时,尤其如此。请参阅主题 5c,“滚动窗口”,以获取有关访问任何已截断数据的更多信息。
EXE -- 可执行文件路径
如果可用,这是指向可执行文件的完整路径,包括程序名称。
请注意:EXE 字段与其他大多数列不同,它不是固定宽度的。当显示时,它加上任何其他可变宽度列将分配所有剩余的屏幕宽度(最多 512 个字符)。
Flags -- 任务标志
此列表示任务的当前调度标志,以十六进制表示,并省略前导零。这些标志在
GID -- 组 ID
有效的组 ID。
GROUP -- 组名
有效的组名。
LOGID -- 登录用户 ID
登录时使用的用户 ID。如果显示为 -1,则表示此信息不可用。
LXC -- Lxc 容器名称
任务在其内部运行的 lxc 容器的名称。如果进程未在容器内运行,则会显示一个破折号 (`-`)。
NI -- 优先级值
任务的优先级值。负优先级值表示更高的优先级,而正优先级值表示更低的优先级。在此字段中显示零表示优先级不会在确定任务的可调度性时进行调整。
注意:此值仅影响相对于同一自组中的其他进程的调度优先级。有关自组的更多信息,请参见 `AGID' 和 `AGNI' 字段。
NU -- 上次使用的 NUMA 节点
表示与上次使用的处理器 (`P`) 关联的 NUMA 节点的数字。如果显示为 -1,则表示 NUMA 信息不可用。
请参阅 `2' 和 `3' 交互命令,了解影响摘要区域的其他 NUMA 设置。
OOMa -- 内存不足调整因子
添加到当前内存不足分数 (OOMs) 的值,范围为 -1000 到 +1000,然后用于确定在内存耗尽时杀死哪个任务。
OOMs -- 内存不足分数
范围为 0 到 +1000 的值,用于选择在内存耗尽时要杀死的任务。零表示“永不杀死”,而 1000 表示“始终杀死”。
P -- 上次使用的 CPU (SMP)
表示上次使用的处理器的数字。在真正的 SMP 环境中,这可能会经常更改,因为内核有意使用弱亲和性。此外,运行 `top` 本身可能会破坏这种弱亲和性,并导致更多的进程更频繁地更改 CPU(因为对 CPU 时间的额外需求)。
PGRP -- 进程组 ID
每个进程都是一个唯一的进程组的成员,该进程组用于分发信号,并且由终端用于仲裁其输入和输出请求。当创建进程(分叉)时,它会成为其父进程的进程组的成员。按照惯例,此值等于进程组中第一个成员的进程 ID(请参见 PID),该成员称为进程组组长。
PID -- 进程 ID
任务的唯一进程 ID,该 ID 会周期性地循环,但绝不会从零重新开始。在内核术语中,它是通过 `task_struct` 定义的可调度实体。
此值也可以用作:进程组 ID(请参见 PGRP);会话组长的会话 ID(请参见 SID);线程组组长的线程组 ID(请参见 TGID);以及进程组组长的 TTY 进程组 ID(请参见 TPGID)。
PPID -- 父进程 ID
任务的父进程的进程 ID (pid)。
PR -- 优先级
任务的调度优先级。如果在此字段中看到 `rt',则表示该任务正在实时调度优先级下运行。
在 Linux 下,实时优先级有些具有误导性,因为传统上操作系统本身是不可抢占的。虽然 2.6 内核可以实现大部分的可抢占性,但这并非总是如此。
PSS -- 比例常驻内存,smaps (KiB)
此任务的 RSS 份额的比例,每个页面除以共享它的进程数。它也是 PSan、PSfd 和 PSsh 字段的总和。
例如,如果一个进程有 1000 个单独的常驻页面,并且有 1000 个与另一个进程共享的常驻页面,则其 PSS 将为 1500(乘以页面大小)。
访问 smaps 值比访问其他内存统计信息代价高 10 倍,并且访问其他用户的 smaps 数据需要 root 权限。
PSan -- 比例匿名内存,smaps (KiB)
PSfd -- 比例文件内存,smaps (KiB)
PSsh -- 比例 Shmem 内存,smaps (KiB)
正如上面 PSS(总比例常驻内存)一样,这些字段表示此任务的每种类型内存的份额的比例,除以共享它的进程数。
访问 smaps 值比访问其他内存统计信息代价高 10 倍,并且访问其他用户的 smaps 数据需要 root 权限。
RES -- 常驻内存大小 (KiB)
虚拟地址空间 (VIRT) 的一个子集,表示任务当前正在使用的未交换的物理内存。它也是 RSan、RSfd 和 RSsh 字段的总和。
它可以包括私有匿名页面、映射到文件的私有页面(包括程序镜像和共享库)以及共享的匿名页面。所有这些内存都由单独的交换文件表示,该文件位于 SWAP 下。
最后,此字段还可能包括共享的文件支持页面,当这些页面被修改时,它们会充当一个专用的交换文件,因此永远不会影响 SWAP。
请参阅“概述,Linux 内存类型”,以获取更多详细信息。
RSS -- 常驻内存,smaps (KiB)
另一个更精确的进程非交换物理内存视图。它来自 smaps_rollup 文件,通常比 RES 所示的值略大。
访问 smaps 值比访问其他内存统计信息代价高 10 倍,并且访问其他用户的 smaps 数据需要 root 权限。
RSan -- 常驻匿名内存大小 (KiB)
常驻内存 (RES) 的一个子集,表示未映射到文件的私有页面。
RSfd -- 常驻文件支持内存大小 (KiB)
常驻内存 (RES) 的一个子集,表示支持程序镜像和共享库的隐式共享页面。它还包括显式文件映射,包括私有和共享映射。
RSlk -- 常驻锁定内存大小 (KiB)
常驻内存 (RES) 的一个子集,不能被交换到磁盘。
RSsh -- 常驻共享内存大小 (KiB)
常驻内存 (RES) 的一个子集,表示显式共享的匿名 shm*/mmap 页面。
RUID -- 实际用户 ID
实际用户 ID。
RUSER -- 实际用户名
实际用户名。
S -- 进程状态
任务的状态,可以是以下之一:
D = 不可中断睡眠
I = 空闲
R = 运行中
S = 睡眠
T = 被作业控制信号停止
t = 在调试期间被调试器停止
Z = 僵尸
显示为“运行中”的任务应该更恰当地被认为是“已准备好运行”——它们的 task_struct 只是表示在 Linux 运行队列中。即使在没有真正的 SMP 机器的情况下,你可能会看到许多处于这种状态的任务,具体取决于 top 的延迟间隔和 nice 值。
SHR -- 共享内存大小(KiB)
驻留内存(RES)的一个子集,可能由其他进程使用。它将包括共享的匿名页和共享的文件支持页。它还包括映射到代表程序镜像和共享库的文件的私有页。
请参阅“概述,Linux 内存类型”以获取更多详细信息。
SID -- 会话 ID
会话是一组进程组(请参阅 PGRP),通常由登录 shell 建立。新 fork 的进程将加入其创建者的会话。按照惯例,此值等于会话中第一个成员的进程 ID(请参阅 PID),该成员称为会话领导者,通常是登录 shell。
STARTED -- 开始时间间隔
自系统启动以来,进程启动的时间长度。因此,最近启动的任务将显示最大的时间间隔。
该值将表示为“MM:SS”(分钟:秒)。但如果间隔太大而无法适应列宽,它将被缩放为“HH,MM”(小时,分钟),甚至更多。
SUID -- 保存的用户 ID
保存的用户 ID。
SUPGIDS -- 辅助组 ID
在登录时或从其父任务继承的任何辅助组的 ID。它们显示为逗号分隔的列表。
注意:SUPGIDS 字段与大多数列不同,它不是固定宽度的。当显示时,它加上任何其他可变宽度列将被分配所有剩余的屏幕宽度(最多 512 个字符)。
SUPGRPS -- 辅助组名称
在登录时或从其父任务继承的任何辅助组的名称。它们显示为逗号分隔的列表。
注意:SUPGRPS 字段与大多数列不同,它不是固定宽度的。当显示时,它加上任何其他可变宽度列将被分配所有剩余的屏幕宽度(最多 512 个字符)。
SUSER -- 保存的用户名
保存的用户名。
SWAP -- 交换大小(KiB)
任务的地址空间中以前驻留在物理内存中,并在物理内存过度提交时写入交换文件的部分。
请参阅“概述,Linux 内存类型”以获取更多详细信息。
TGID -- 线程组 ID
任务所属的线程组的 ID。它是线程组领导者的 PID。在内核术语中,它表示那些共享 mm_struct 的任务。
TIME -- CPU 时间
任务自启动以来使用的总 CPU 时间。当累积模式开启时,每个进程都将列出它及其已终止子进程使用的 CPU 时间。你可以使用“S”来切换累积模式,该模式既是命令行选项,也是交互式命令。请参阅“S”交互式命令以获取有关此模式的更多信息。
TIME+ -- CPU 时间,以百分之一秒为单位
与 TIME 相同,但通过以百分之一秒为单位提供更精细的粒度。
TPGID -- TTY 进程组 ID
与连接的 TTY 的前台进程的进程组 ID。如果进程未连接到终端,则为 -1。 按照惯例,此值等于进程组领导者(参见 PGRP)的进程 ID(参见 PID)。
TTY -- 控制终端
控制终端的名称。 这通常是进程启动并用于输入或输出的设备(串行端口、PTY 等)。 但是,任务不必与终端关联,在这种情况下,您将看到显示 `?`。
UID -- 用户 ID
任务所有者的有效用户 ID。
USED -- 已用内存(KiB)
此字段表示任务正在使用的非交换物理内存 (RES) 加上其地址空间的交换部分 (SWAP)。
请参阅“概述,Linux 内存类型”以获取更多详细信息。
USER -- 用户名
任务所有者的有效用户名。
USS -- 唯一集合大小
非交换物理内存(`RSS')的部分,与其他进程不共享。 它来自 `smaps_rollup` 文件。
访问 smaps 值比其他内存统计数据和数据的开销高 10 倍,并且访问其他用户的数据需要 root 权限。
VIRT -- 虚拟内存大小(KiB)
任务使用的虚拟内存总量。 它包括所有代码、数据和共享库,以及已交换到磁盘的页面以及已映射但未使用的页面。
请参阅“概述,Linux 内存类型”以获取更多详细信息。
WCHAN -- 正在睡眠的函数
此字段将显示任务当前正在睡眠的内核函数的名称。 正在运行的任务将在该列中显示一个破折号 (`-`)。
ioR -- 读取的 I/O 字节数
进程导致从存储层读取的字节数。
显示其他用户的 `io` 数据需要 root 权限。
ioRop -- I/O 读取操作
进程的读取 I/O 操作(系统调用)的数量。 这些调用不一定会导致实际的物理磁盘 I/O。
ioW -- 写入的 I/O 字节数
进程导致发送到存储层的字节数。
ioWop -- I/O 写入操作
进程的写入 I/O 操作(系统调用)的数量。 这些调用不一定会导致实际的物理磁盘 I/O。
nDRT -- 脏页计数
自上次写入辅助存储以来已修改的页数。 必须在将脏页写入辅助存储后,才能将相应的物理内存位置用于其他虚拟页。
该字段已在 Linux 2.6 中弃用,并且始终为零。
nMaj -- 主要页面错误计数
任务发生的主要页面错误的数量。当进程尝试读取或写入当前不在其地址空间中的虚拟页面时,会发生页面错误。主要页面错误是指在使该页面可用时,需要访问辅助存储。
nMin -- 次要页面错误计数
任务发生的次要页面错误的数量。当进程尝试读取或写入当前不在其地址空间中的虚拟页面时,会发生页面错误。次要页面错误不涉及访问辅助存储以使该页面可用。
nTH -- 线程数
与进程关联的线程数。
nsCGROUP -- CGROUP 命名空间
用于隐藏进程所属的控制组的身份的命名空间的 inode。
nsIPC -- IPC 命名空间
用于隔离进程间通信 (IPC) 资源(如 System V IPC 对象和 POSIX 消息队列)的命名空间的 inode。
nsMNT -- MNT 命名空间
用于隔离文件系统挂载点,从而提供不同的文件系统层次结构视图的命名空间的 inode。
nsNET -- NET 命名空间
用于隔离资源(如网络设备、IP 地址、IP 路由、端口号等)的命名空间的 inode。
nsPID -- PID 命名空间
用于隔离进程 ID 编号的命名空间的 inode,这意味着它们不必保持唯一。因此,每个这样的命名空间都可以拥有自己的 `init/systemd`(PID #1)来管理各种初始化任务并回收孤立的子进程。
nsTIME -- TIME 命名空间
一个允许进程看到不同的系统时间的命名空间,类似于 UTS 命名空间。
nsUSER -- USER 命名空间
用于隔离用户和组 ID 编号的命名空间的 inode。因此,一个进程在用户命名空间之外可以具有正常的非特权用户 ID,而在该命名空间内,可以具有用户 ID 0 并具有完全的 root 权限。
nsUTS -- UTS 命名空间
用于隔离主机名和 NIS 域名,UTS 仅表示“UNIX Time-sharing System”(UNIX 时间共享系统)。
vMj -- 主要页面错误计数增量
自上次更新以来发生的 主要页面错误的数量(参见 nMaj)。
vMn -- 次要页面错误计数增量
自上次更新以来发生的 次要页面错误的数量(参见 nMin)。
MANAGING 字段
按下交互式命令 \`f\`(字段管理)后,您将看到一个屏幕,其中显示:1)“当前”窗口名称;2)指定的排序字段;3)所有字段及其当前顺序以及描述。带有星号的条目是当前显示的字段,屏幕宽度允许。
如屏幕上的说明所示,您可以使用“向上”和“向下”箭头键在字段之间导航。PgUp、PgDn、“主页”和“结束”键也可用于快速到达第一个或最后一个可用字段。
右箭头键用于选择要重新定位的字段,而左箭头键或
`d' 键或
`s' 键用于将字段指定为排序字段。请参阅主题 4c. 任务区域命令,排序,以获取有关选择排序字段的更多信息。
`a' 和 `w' 键可用于循环浏览所有可用的窗口,而 `q' 或
字段管理屏幕还可以用于在全屏模式或交替显示模式下更改“当前”窗口/字段组。当您按 q' 或 <Esc> 时,所选的目标将成为您返回顶部显示时的“当前”对象。请参阅主题 5. 交替显示设置和 \g' 交互命令,以了解“当前”窗口和字段组。
注意:如果通过字段管理屏幕对任何字段进行更改,则任何水平滚动过的窗口都将被重置。但是,任何垂直滚动位置都不会受到影响。请参阅主题 5c. 滚动窗口,以获取有关垂直和水平滚动的更多信息。
交互命令 以下是按类别划分的命令的简要索引。某些命令出现多次——它们的含义或范围可能因其发出的上下文而异。
全局命令
<Ent/Sp> ?, =, 0,
A, B, d, E, e, g, H, h, I, k, q, r, s, W, X, Y, Z,
^G, ^K, ^N, ^P, ^U, ^L, ^R
摘要区域命令
C, l, t, m, 1, 2, 3, 4, 5, !
任务区域命令
外观: b, J, j, x, y, z
内容: c, F, f, O, o, S, U, u, V, v, ^E
大小: #, i, n
排序: <, >, f, R
颜色映射
<Ret>, a, B, b, H, M, q, S, T, w, z, 0 - 7
用于窗口的命令
-, _, =, +, A, a, G, g, w
滚动窗口
C, Up, Dn, Left, Right, PgUp, PgDn, Home, End
在窗口中搜索
L, &
在窗口中筛选
O, o, ^O, =, +
全局命令 全局交互命令始终在全屏模式和交替显示模式下可用。但是,当在安全模式下运行时,某些交互命令不可用。
如果您想提前知道您的顶部是否已锁定,只需请求帮助并查看系统摘要的第二行即可。
<Enter> 或 <Space> :刷新显示
这些命令会唤醒 top,并且在接收到任何输入后,整个显示屏将被重新绘制。它们还会强制更新任何热插拔的 CPU 或物理内存更改。
如果您有较大的延迟间隔,并且希望查看当前状态,请使用其中任何一个键。
? | h :帮助
有两个级别的帮助可用。第一个将提供所有基本交互命令的提示。如果 top 已锁定,则该屏幕将被缩短。
在帮助屏幕中键入 h' 或?' 会将您带到适用于备用显示模式的交互式命令的帮助。
= :Exit-Display-Limits
移除对显示内容的限制。此命令将撤消任何活动的 i'(空闲任务)、n'(最大任务)、v'(隐藏子项)和F' 焦点命令。它还提供了一种退出 PID 监控、用户过滤、其他过滤、定位处理和组合 CPU 模式的方式。
此外,如果窗口已滚动,此命令将重置窗口。
0 :Zero-Suppress toggle
此命令确定是否显示或隐藏任务窗口中许多字段中的零。UID、GID、NI、PR 或 P 等字段不受此切换影响。
A :Alternate-Display-Mode toggle
此命令将在全屏模式和备用显示模式之间切换。请参阅主题“备用显示模式的配置”,以及交互式命令 `g',以了解“当前”窗口和字段组。
B :Bold-Disable/Enable toggle
此命令会影响对 bold terminfo 功能的使用,并更改“当前”窗口的摘要区域和任务区域。虽然它主要用于哑终端,但也可以随时应用。
注意:当此切换处于“开”状态并且 top 在单色模式下运行时,整个显示将显示为普通文本。因此,除非 `x' 和/或 `y' 切换正在使用反显进行强调,否则将不会有任何视觉提示表明它们是否已打开。
* d | s :Change-Delay-Time-interval
系统将提示您输入显示更新之间的延迟时间(以秒为单位)。
支持使用小数,但不允许使用负数。输入 0 将导致(几乎)连续更新,这会导致系统和 tty 驱动程序难以跟上 top 的需求,从而产生令人不满意的显示效果。延迟值与系统负载成反比,因此请谨慎设置。
如果您想知道当前的延迟时间,只需请求帮助并查看第二行中的系统摘要即可。
E :Enforce-Summary-Memory-Scale in Summary Area
使用此命令,您可以循环浏览摘要区域中可用的内存缩放,范围从 KiB(千字节或 1,024 字节)到 EiB(艾字节或 1152,921,504,606,846,976 字节)。
如果看到显示的数字和后面的标签之间有一个 `+',则表示 top 必须截断该数字的某些部分。通过提高缩放因子,可以避免这种情况。
e :Enforce-Task-Memory-Scale in Task Area
使用此命令,您可以循环浏览任务区域中可用的内存缩放,范围从 KiB(千字节或 1,024 字节)到 PiB(佩字节或 1,125,899,906,842,624 字节)。
虽然 top 会尝试遵守所选的目标范围,但为了适应当前值,可能仍然需要进行额外的缩放。如果您希望在内存列中看到更一致的结果,提高缩放范围通常可以实现这一目标。但是,将其提高过多可能会导致所有结果都变为零,而这不能使用 `0' 交互式命令来抑制。
g :选择另一个窗口/字段组
您将被提示输入一个介于 1 和 4 之间的数字,以指定应该设为“当前”窗口的字段组。 您很快就会熟悉这 4 个窗口,尤其是在尝试使用“交替显示模式”之后。
H :线程模式切换
当此切换按钮为“开”时,将为所有可见任务窗口中的所有进程显示单独的线程。 否则,top 将显示每个进程中所有线程的汇总。
I :Irix/Solaris 模式切换
在 Solaris 模式下(“I”切换按钮关闭),任务的 CPU 使用率将除以 CPU 的总数。 在发出此命令后,您将被告知此切换按钮的新状态。
* k :终止任务
您将被提示输入一个 PID,然后输入要发送的信号。
如果未输入 PID 或输入负数,则将解释为提示中显示的默认值(显示的第一个任务)。 PID 值为零表示 top 程序本身。
默认信号(如提示中所示)为 SIGTERM。 但是,您可以通过数字或名称发送任何信号。
如果您想中止终止过程,请根据您的进度执行以下操作之一:
1 在 PID 提示符处,输入一个无效的数字
2 在信号提示符处,输入 0(或任何无效的信号)
3 在任何提示符处,输入
q :退出
* r :重新调整任务的优先级
您将被提示输入一个 PID,然后输入要将其调整到的值。
如果未输入 PID 或输入负数,则将解释为提示中显示的默认值(显示的第一个任务)。 PID 值为零表示 top 程序本身。
正的 nice 值将导致进程失去优先级。 相反,负的 nice 值将导致内核将进程视为更重要的进程。 通常,普通用户只能增加 nice 值,并且不能降低它。
如果您想中止重新调整优先级的过程,请根据您的进度执行以下操作之一:
1 在 PID 提示符处,输入一个无效的数字
2 在 nice 提示符处,不输入任何内容,然后按
W :写入配置文件
这将保存您的所有选项和切换按钮,以及当前的显示模式和延迟时间。 在退出 top 之前发出此命令,您将能够稍后以完全相同的状态重新启动。
X :额外的固定宽度
某些字段是固定宽度且不可缩放的。 因此,它们可能会被截断,这会通过最后一个位置的“+”符号来指示。
此交互式命令可用于更改以下字段的宽度:
字段 默认值 字段 默认值 字段 默认值
GID 5 GROUP 8 WCHAN 10
LOGID 5 LXC 8 nsCGROUP 10
RUID 5 RUSER 8 nsIPC 10
SUID 5 SUSER 8 nsMNT 10
UID 5 TTY 8 nsNET 10
USER 8 nsPID 10 nsTIME 10
nsUSER 10
nsUTS 10
系统会提示您输入要添加到上述默认宽度中的数值。 输入零将返回这些默认值。
如果您输入一个负数,top 将自动增加列大小,直到没有更多被截断的数据。
请注意:无论是显式还是自动增加,这些字段的宽度都不会被 top 减小。要缩小它们,您必须指定一个较小的数字或恢复默认值。
Y : Inspect-Other-Output
发出 Y 交互式命令后,系统将提示您输入目标 PID。输入一个值或接受默认值,将进入一个单独的屏幕。该屏幕可用于查看各种文件或管道命令的输出,同时暂停正常的 top 迭代显示。
请注意:此交互式命令只有在配置文件中手动添加了相应的条目后才能完全实现。有关创建这些条目的详细信息,请参见主题 6b:ADDING INSPECT Entries。
大多数用于导航 Inspect 功能的键都在其标题序言中有所反映。但是,一旦选择了特定的文件或命令,还会提供一些额外的键。对于那些使用过 less 翻页器的用户来说,这些键是熟悉的,并且在此处进行总结,以供将来参考。
键 作用
= 切换状态行、文件或管道
/ 查找,等效于 `L` locate
n 查找下一个,等效于 `&` locate next
<Space> 向下滚动,等效于 <PgDn>
b 向上滚动,等效于 <PgUp>
g 移动到第一行,等效于 <Home>
G 移动到最后一行,等效于 <End>
Z : Change-Color-Mapping
此键将带您进入一个单独的屏幕,您可以在其中更改“当前”窗口或所有窗口的颜色。有关此交互式命令的详细信息,请参见主题 4d:COLOR Mapping。
^G : Display-Control-Groups (Ctrl 键 + `g`)
^K : Display-Cmdline (Ctrl 键 + `k`)
^N : Display-Environment (Ctrl 键 + `n`)
^P : Display-Namesspaces (Ctrl 键 + `p`)
^U : Display-Supplementary-Groups (Ctrl 键 + `u`)
应用于显示的第一个进程,这些命令将显示该任务的完整(可能已换行)信息。此类数据将在屏幕底部的单独窗口中显示,同时正常的 top 监视继续进行。
再次按相同的 Ctrl 命令将删除该单独的窗口,= 命令也会删除。如果在已经激活一个 Ctrl 命令的情况下,按下一个不同的 Ctrl 组合键,则会立即切换到新的信息。
其中,Ctrl+N(环境)命令值得注意。它的输出可能非常多,并且在换行时不易阅读。可以通过在 rcfile 中添加一个 Inspect 条目来获得更易于阅读的版本,如下所示。
pipe ^I Environment ^I cat /proc/%d/environ | tr '\0' '\n'
请参阅上面的“Y”交互式命令和主题 6b。添加 INSPECT 条目以获取更多信息。
作为“Inspect”的一种替代方法,并且适用于所有这些“Ctrl”命令,可以使用 Tab 键突出显示底部的单个元素。
^L :Logged-Messages (Ctrl 键 + `l')
最近的 10 条消息将显示在一个单独的窗口中,位于屏幕底部,同时正常的顶部监控会继续进行。再次按“^L”会删除该窗口,按“=”命令也会删除。使用 Tab 键突出显示单个消息。
* ^R :Renice-an-Autogroup (Ctrl 键 + `r')
您将被提示输入 PID,然后输入其自动组 AGNI 的值。
输入没有 PID 会被解释为默认值(显示的第一个任务)。
正 AGNI 值会导致该自动组中的进程失去优先级。相反,负值会使内核更青睐它们。普通用户不允许设置负 AGNI 值。
如果您想中止 renice 过程,请按
* 带有星号 (`*`) 的命令在安全模式下不可用,也不会显示在第一级帮助屏幕上。
SUMMARY AREA 命令 摘要区域交互式命令始终在全屏模式和备用显示模式下可用。它们会影响显示的起始行,并确定消息和提示的位置。
这些命令始终仅影响“当前”窗口/字段组。请参阅主题 5。备用显示设置和“g”交互式命令,以了解“当前”窗口和字段组。
C :Show-scroll-coordinates toggle
切换一条信息消息,每当消息行未被使用时,该消息都会显示。有关更多信息,请参阅主题 5c。滚动一个窗口。
l :Load-Average/Uptime toggle
这行也包含程序名称(可能是别名),当以全屏模式运行时,或者当以备用显示模式运行时,这行包含“当前”窗口的名称。
t :Task/Cpu-States toggle
此命令会影响 2 到多个摘要区域行,具体取决于“1”、“2”或“3”命令切换的状态,以及 top 是否在真正的 SMP 下运行。
此摘要区域部分也受“H”交互式命令切换的影响,如总标签中显示的任务或线程中所反映的那样。
此命令充当四向切换,循环显示以下模式: 按类别显示详细的百分比 缩写的用户/系统和总百分比 + 条形图 缩写的用户/系统和总百分比 + 块图 关闭任务和 CPU 状态显示
在任一图形模式下运行,当同时显示各个 CPU 或 NUMA 节点时,显示效果会更好。请参阅以下 1'、2' 和 `3' 命令以获取更多信息。
m:内存/交换空间使用情况切换
此命令会影响显示物理内存和虚拟内存的两个摘要区域行。
此命令是一个四向切换,循环显示以下模式:
按内存类型显示详细的百分比
显示简短的“已用百分比/总可用空间 + 柱状图”
显示简短的“已用百分比/总可用空间 + 块状图”
关闭内存显示
1:单/分离 CPU 状态切换
此命令会影响 `t' 命令的 CPU 状态部分显示方式。虽然此切换主要用于大规模并行 SMP 机器,但它并不局限于仅用于 SMP 环境。
当您在摘要区域看到 `%Cpu(s):' 时,`1' 切换处于打开状态,所有 CPU 信息都显示在一行中。否则,每个 CPU 都会单独显示,格式为:`%Cpu0、%Cpu1、...,最多显示可用屏幕高度。
2:NUMA 节点/CPU 摘要切换
此命令会在 `1' 命令的 CPU 摘要显示(仅)和摘要显示加上每个 NUMA 节点的 CPU 使用情况统计信息之间进行切换。如果系统具有必需的 NUMA 支持,则此命令才可用。
3:扩展 NUMA 节点
您将被邀请输入一个数字,表示一个 NUMA 节点。之后,将显示该节点的摘要以及该节点中每个 CPU 的统计信息,直到按下 `1'、`2' 或 `4' 命令切换。此交互式命令仅在系统具有必需的 NUMA 支持时可用。
4:相邻显示多个元素切换
此命令切换会关闭 `1' 切换,并在每一行显示多个 CPU 和内存结果。每次按下 `4' 键,都会添加一个 CPU,直到再次切换回 CPU 和内存结果的单独行。
以这种方式最多可以显示每行 8 个 CPU。但是,在达到最大数量之前,可能会发生数据截断。当显示 `t' 命令切换中的详细统计信息时,情况尤其如此,因为此类数据无法像图形表示那样进行缩放。
如果希望快速退出相邻模式,而无需循环到 8 个,只需使用 `1' 命令切换即可。
5:显示 P 核和 E 核切换
此命令切换仅在 `t' 切换处于打开状态,并且 `1'、`2'、`3' 和 `!' 切换处于关闭状态时才有效,此时会显示单个 CPU 结果。它假定平台具有多个不同类型的核心,即多线程(P 核)或单线程(E 核)。
通常,每个 CPU 显示为 `%Cpu0、%Cpu1、...,但可以使用此切换来识别和/或按其核心类型(P 核(性能)或 E 核(效率))筛选这些 CPU。
第一次按下 `5' 时,每个 CPU 显示为 `%CpP' 或 `%CpE',表示两种核心类型。第二次按下时,仅显示 P 核(%CpP)。第三次按下时,仅显示 E 核(%CpE)。当此命令切换按下第四次时,CPU 显示将返回到正常的 `%Cpu' 约定。
如果未存在单独的性能和效率类别,则此命令切换将不起作用。
! :Combine-Cpus-Mode 切换
此命令切换用于大规模并行 SMP 环境,即使使用 4' 命令切换,也无法显示所有处理器。 每次按下!',组合的 CPU 数量将加倍,从而减少显示的 CPU 行总数。
例如,第一次按下 !' 时,将组合两个 CPU 并显示为0-1, 2-3, ...',而不是通常的 %Cpu0, %Cpu1, %Cpu2, %Cpu3, ...'。 第二次按下!',组合四个 CPU,显示为 0-3, 4-7, ...'。 然后,第三次按下!',组合八个 CPU,显示为 `0-7, 8-15, ...',依此类推。
这种进度将持续,直到再次显示单个 CPU,并且会影响 1' 和4' 切换(单列或多列)。 使用 `=' 命令退出“组合 CPU 模式”。
注意:如果任何窗口的整个摘要区域都已切换为“关闭”,您将只剩下消息行。 这样,您将最大限度地提高可用的任务行,但(暂时)牺牲了全屏模式下的完整程序名称或在替代显示模式下“当前”窗口的名称。
任务区域命令
任务区域交互式命令始终可在全屏模式下使用。
如果“当前”窗口的任务显示已切换为“关闭”(请参阅主题 5. 替代显示规定),则任务区域交互式命令在替代显示模式下将不可用。
任务窗口的显示
J :Justify-Numeric-Columns 切换
在右对齐(默认)和左对齐的数字数据之间切换。 如果数字数据完全填充可用列,则此命令切换可能会仅影响列标题。
j :Justify-Character-Columns 切换
在左对齐(默认)和右对齐的字符数据之间切换。 如果字符数据完全填充可用列,则此命令切换可能会仅影响列标题。
以下命令也将受到全局 `B'(粗体启用)切换的状态影响。
b :Bold/Reverse 切换
此命令将影响 x' 和y' 切换的显示方式。 此外,当通过 t' 或m' 切换为 CPU 状态或内存使用量选择条形图时,此命令还可能影响摘要区域。
x :Column-Highlight 切换
更改当前排序字段的突出显示。 如果您忘记了正在排序的字段,此命令可以用作快速的视觉提示,前提是排序字段正在显示。 排序字段可能不可见,因为: 1 屏幕宽度不足 2 `f' 交互式命令已将其关闭
y :Row-Highlight 切换
更改“正在运行”任务的突出显示。 要了解有关此任务状态的更多信息,请参阅主题 3a. 字段描述,`S' 字段(进程状态)。
使用此功能可以深入了解您的系统健康状况。唯一的成本是需要一些额外的 tty 转义序列。
z:颜色/单色切换
在“当前”窗口中,此命令会在您上次使用的颜色方案和较旧的黑底白字或白底黑字方案之间进行切换。此命令会更改摘要区域和任务区域,但不会影响 x、y 或 b 切换的状态。
任务窗口内容
c:命令行/程序名切换
无论当前是否显示“命令”列,此命令都将被执行。以后,如果该字段显示出来,您所做的更改将会生效。
F:保持父级焦点切换
在树形视图模式下,此键充当切换键,用于保持对目标任务的焦点,该任务可能具有分叉的子任务。如果树形视图模式关闭,则此键无效。
该切换应用于“当前”窗口中的第一个(最顶层)进程。设置后,该任务将始终显示为第一个(最顶层)进程,以及其分叉的子任务。所有其他进程将被抑制。
注意:`i`(空闲任务)、`n`(最大任务数)、`v`(隐藏子任务)以及用户/其他筛选器等键仍然可用,并且可以影响显示的內容。
f:字段管理
此键会显示一个单独的屏幕,您可以在其中更改显示的字段、它们的顺序,以及指定排序字段。有关此交互式命令的更多信息,请参阅主题 3b。管理字段。
O | o:其他筛选
系统会提示您输入选择标准,然后确定哪些任务将在“当前”窗口中显示。您的标准可以区分大小写,也可以忽略大小写。您还可以确定是否将匹配的任务包含或排除在顶部显示中。
请参阅主题 5e。有关窗口中筛选的详细信息,以及其他相关交互式命令。
S:累积时间模式切换
当累积模式开启时,每个进程都会列出其自身及其已终止子进程所使用的 CPU 时间。
当关闭时,分叉成许多单独任务的程序看起来所占用的资源较少。对于 init 或 shell 之类的程序来说,这很合适,但对于编译器等其他程序来说,可能不太合适。尝试使用两个共享相同排序字段但 S 状态不同的任务窗口,看看您更喜欢哪种显示方式。
发出此命令后,系统会告知您此切换的新状态。如果您想提前知道是否启用了累积模式,只需请求帮助并查看第二个行上的窗口摘要即可。
U | u:仅显示特定用户
系统会提示您输入要显示的用户的 uid 或名称。-u 选项匹配有效用户,而 -U 选项匹配任何用户(实际、有效、保存或文件系统)。
之后,在该任务窗口中,只会显示匹配的用户,或者可能根本不会显示任何进程。在用户 ID 或名称前添加感叹号 (!),会指示 top 命令仅显示与提供的用户不匹配的进程。
可以使用不同的任务窗口来过滤不同的用户。之后,如果您希望在“当前”窗口中再次监视所有用户,请重新输入此命令,然后仅按
V:森林视图模式切换
在这种模式下,进程会根据其父进程重新排序,并且“COMMAND”列的布局类似于树。在森林视图模式下,仍然可以切换程序名称和命令行(参见交互命令 c),或者切换进程和线程(参见交互命令 H)。
注意:键入任何影响排序顺序的键都会退出“当前”窗口中的森林视图模式。请参阅主题 4c,“任务区域命令,排序”,以获取有关这些键的信息。
v:隐藏/显示子进程切换
在森林视图模式下,此键充当切换器,用于折叠或展开父进程的子进程。
切换应用于“当前”窗口中的第一个(最顶部)进程。请参阅主题 5c,“滚动窗口”,以获取有关垂直滚动的更多信息。
如果目标进程未分叉任何子进程,则此键无效。当不在森林视图模式下时,此键也无效。
^E:缩放 CPU 时间字段(Ctrl 键 + `e`)
“time”字段通常以其宽度允许的最大精度显示。此切换会降低该精度,直到它循环显示。它还说明了这些字段可能自动经历的缩放,这通常取决于系统运行了多长时间。
例如,如果显示“MMM:SS.hh”,则每次按 ^E 键,它将变为:“MM:SS”、“小时,MM”、“天+小时”,最后变为“周+天”。
并非所有时间字段都受如此范围的缩放影响。
任务窗口的大小
i:空闲进程切换
显示所有任务或仅显示活动任务。当此切换器关闭时,自上次更新以来未使用任何 CPU 的任务将不会显示。但是,由于 %CPU 和 TIME+ 字段的粒度,有些进程可能仍然会显示,即使它们似乎没有使用任何 CPU。
如果将此命令应用于处于替代显示模式下的最后一个任务显示,则它不会影响窗口的大小,因为所有先前的任务显示都已经绘制完毕。
n | #:设置最大任务数
系统将提示您输入要显示的任務數量。將使用您輸入的數字或可用螢幕行數中的較小值。
在替代顯示模式下使用時,此命令可讓您精確控制每個可見任務顯示的大小,除了最後一個。它不會影響最後一個窗口的大小,因為所有先前的任務顯示都已經繪製完成。
注意:如果您希望在备用显示模式下增加最后一个可见任务显示的尺寸,只需减小其上方任务显示的尺寸。
任务窗口排序
为了兼容性,此顶部支持以前的顶部排序键中的大多数。由于这主要是为了方便以前的顶部用户,这些命令不会出现在任何帮助屏幕上。 命令 排序字段 是否支持 A 启动时间(非显示) 否 M %MEM 是 N PID 是 P %CPU 是 T TIME+ 是
在使用以下任何排序选项之前,顶部建议您暂时启用列突出显示,方法是使用“x”交互命令。这将有助于确保实际排序环境与您的意图相符。
以下交互命令仅当当前排序字段可见时才会被执行。排序字段可能不可见,原因如下: 1 屏幕宽度不足 2 “f”交互命令将其关闭
< :移动排序字段到左侧
除非当前排序字段是正在显示的第一个字段,否则此命令会将排序列移动到左侧。
> :移动排序字段到右侧
除非当前排序字段是正在显示的最后一个字段,否则此命令会将排序列移动到右侧。
以下交互命令始终会被执行,无论当前排序字段是否可见。
f :字段管理
此键会显示一个单独的屏幕,您可以在其中更改用作排序字段的字段,以及执行其他功能。这可以是一种方便的方法,可以在关闭列突出显示的情况下运行顶部时,简单地验证当前排序字段。
R :反向/普通排序字段切换
使用此交互命令,您可以切换高到低和低到高的排序。
颜色映射
当您发出“Z”交互命令时,系统将显示一个单独的屏幕。该屏幕可用于更改“当前”窗口或所有四个窗口中的颜色,然后返回到顶部显示。
以下交互命令可用。
4个大写字母以选择目标
8个数字以选择颜色
可用的常规切换选项
B :粗体禁用/启用
b :正在运行的任务“粗体”/反转
z :颜色/单色
其他命令可用
a/w :应用,然后转到下一个/上一个
如果您使用“a”或“w”来循环目标窗口,则将应用您离开该窗口时显示的颜色方案。您可以轻松返回到任何窗口,并重新应用不同的颜色或完全关闭颜色,方法是使用“z”切换。
颜色映射屏幕还可以用于在全屏模式或备用显示模式下更改“当前”窗口/字段组。无论何时按下“q”或
备用显示模式
WINDOWS 概述
字段组/窗口: 在全屏模式下,单个窗口表示整个屏幕。该单个窗口仍然可以更改以显示 4 个不同的字段组之一(参见下面的“g”交互式命令)。这 4 个字段组中的每个字段组都有一个单独的可配置摘要区域和自己的可配置任务区域。
在备用显示模式下,这 4 个底层字段组现在可以同时显示,或者可以根据您的命令单独关闭。
摘要区域始终存在,即使它仅是消息行。在任何给定时间,只能显示一个摘要区域。但是,根据您的命令,屏幕上当前可以显示从零到四个单独的任务显示。
当前窗口: “当前”窗口是与摘要区域关联的窗口,也是所有任务相关命令始终定向到的窗口。由于在备用显示模式下,您可以切换任务显示,因此某些命令可能对“当前”窗口有一定限制。
进一步的复杂性在于,您已将第一个摘要区域行关闭。由于窗口名称(通过“l”切换的行)已消失,因此您将无法轻松知道哪个窗口是“当前”窗口。
用于窗口的命令 - | _ :显示/隐藏窗口切换 “-”键用于切换“当前”窗口的任务显示。当显示时,该任务区域将显示您使用“f”交互式命令建立的最小列标题。它还将反映您应用的任何其他任务区域选项/切换,从而显示零个或多个任务。
“_”键对所有任务显示执行相同的操作。换句话说,它在当前可见的任务显示和您之前已关闭的任何任务显示之间进行切换。如果所有 4 个任务显示当前都可见,则此交互式命令将仅保留摘要区域作为唯一的显示元素。
* = | + :均衡/重置窗口
“=”键强制“当前”窗口的任务显示可见。它还会反转任何活动的“i”(空闲任务)、“n”(最大任务)、“u/U”(用户过滤器)、“o/O”(其他过滤器)、“v”(隐藏子任务)、“F”(焦点)、“L”(定位)和“!”(组合 CPU)命令。此外,如果窗口已滚动,则此命令将将其重置。请参阅主题 5c。滚动窗口,以获取有关垂直和水平滚动的更多信息。
“+”键对所有窗口执行相同的操作。四个任务显示将重新出现,并且均匀分布,同时保留之前应用的任何自定义设置,但“=”命令切换的设置除外。
* A :切换备用显示模式
此命令将在全屏模式和备用显示模式之间进行切换。
首次执行此命令时,将显示所有四个任务显示。此后, 每次切换模式时,您只会看到您选择使其可见的任务显示。
* a | w :下一个窗口/上一个窗口
这将更改“当前”窗口,从而更改命令指向的窗口。
这些键以循环方式工作,因此您可以使用任一键到达所需的任何窗口。
假设窗口名称可见(您尚未关闭“l”),每当“当前”窗口的名称失去强调/颜色时,这会提醒您任务显示已关闭,并且许多命令将被限制。
G :更改窗口/字段组名称
系统将提示您输入一个新名称,以将其应用于“当前”窗口。
这不需要窗口名称可见(“l”切换为打开状态)。
* 带有星号(`*`)的交互式命令具有超出替代显示模式的用途。
=、A、g 始终可用
a、w 以相同的方式处理颜色映射
以及字段管理
* g :选择另一个窗口/字段组
系统将提示您输入一个介于 1 和 4 之间的数字,以指定应设为“当前”窗口的字段组。
在全屏模式下,此命令对于更改“当前”窗口是必需的。 在替代显示模式下,它只是“a”和“w”命令的一种不太方便的替代方法。
滚动窗口 通常,任务窗口是对系统总任务/线程的部分视图,仅显示一些可用字段/列。 使用这些滚动键,您可以垂直或水平移动该视图,以显示任何所需的任务或列。
向上、页上 :滚动任务 将视图向上移动到第一个任务行,直到第一个任务显示在“当前”窗口的顶部。 向上箭头键移动一行,而页上键滚动整个窗口。
向下、页下 :滚动任务 将视图向下移动到最后一个任务行,直到最后一个任务是仅显示的位于“当前”窗口顶部的任务。 向下箭头键移动一行,而页下键滚动整个窗口。
向左、向右 :滚动列 一次水平移动一个列的显示字段。
请注意,一些字段/列不是固定宽度的,而是当可见时分配所有剩余的屏幕宽度。
在向右或向左滚动时,此功能最初可能会产生一些意想不到的结果。
此外,对于任何位于最后一个显示字段中的变量宽度字段,还有特殊规定。 一旦通过向右箭头键到达该字段,并且它成为显示的唯一列,您可以继续在该字段内水平滚动。 有关更多信息,请参阅下面的“C”交互式命令。
主页 :跳转到主位置 将显示重新定位到未滚动的坐标。
结束 :跳转到结束位置 重新定位显示,以便最右边的列反映最后一个可显示的字段,并且最底部的任务行表示最后一个任务。
注意:从这个位置,仍然可以使用箭头键向下和向右滚动。
这会一直持续到只剩下最后一列和最后一个任务作为唯一的显示元素。
C : 显示滚动坐标切换
切换一个信息性消息,该消息会在消息行没有被占用时显示。该消息将采用以下两种形式之一,具体取决于是否也滚动了具有可变宽度的列。
滚动坐标:y = n/n(任务),x = n/n(字段)
滚动坐标:y = n/n(任务),x = n/n(字段)+ nn
显示的坐标 n/n 是相对于“当前”窗口的左上角的。 附加的“+ nn”表示在已滚动具有可变宽度的列时,在其中的水平位移。这种位移通过使用右箭头和左箭头键以正常的 8 个字符制表位量进行。
y = n/n(任务)
第一个 n 表示最顶部的可见任务,由滚动键控制。 第二个 n 会自动更新,以反映总任务数。
x = n/n(字段)
第一个 n 表示最左侧显示的列,由滚动键控制。 第二个 n 是可显示的字段总数,并通过“f”交互命令来设置。
上述交互命令始终在全屏模式下可用,但在如果“当前”窗口的任务显示已切换关闭时,则永远在替代显示模式下不可用。
注意:当任何形式的过滤处于活动状态时,您可能会在滚动时看到一些轻微的偏差,因为并非所有任务都可见。这在使用向上/向下箭头键时尤其明显。
在窗口中搜索
您可以使用这些交互命令来定位包含特定值的任务行。
L:定位字符串
系统将提示您输入要从当前窗口坐标开始搜索的区分大小写的字符串。搜索字符串内容没有任何限制。
搜索不仅限于单个字段或列中的值。任务行中显示的所有值都可以包含在搜索字符串中。您可以包括空格、数字、符号甚至森林视图艺术作品。
按
&:定位下一个
假设已设置了搜索字符串,top 将尝试定位下一个匹配项。
找到匹配项时,当前窗口将垂直重新定位,以便包含该字符串的任务行位于第一位。滚动坐标消息可以提供对此类垂直重新定位的确认(请参阅“C”交互命令)。但是,水平滚动永远不会通过搜索来更改。
匹配字符串的可用性将受到以下因素的影响。
从总可用字段中显示哪些字段,
请参阅主题 3b。管理字段。
垂直和/或水平滚动窗口,请参阅主题 5c,“滚动窗口”。
命令/命令行切换的状态,请参阅 `c'` 交互命令。
所选排序列的稳定性,例如 PID 很好,但 %CPU 较差。
如果搜索失败,恢复“当前”窗口的主位置(未滚动),水平滚动,显示命令行或选择更稳定的排序字段,可能会产生成功的 &' 搜索。
上述交互命令始终在全屏模式下可用,但在备用显示模式下,如果“当前”窗口的任务显示已切换关闭,则永远不可用。
窗口中的筛选
您可以使用此“其他筛选器”功能来建立选择标准,然后确定在“当前”窗口中显示哪些任务。如果通过 W 交互命令将其保存在 rcfile 中,则此类筛选器可以持久化。
建立筛选器至少需要:1)字段名;2)运算符;以及 3)选择值。这是 top 中用户输入要求最复杂的部分,因此,如果您犯了错误,请使用命令回溯。请记住在提示输入时使用向上/向下箭头键或其别名。
筛选器基础知识
字段名区分大小写,拼写方式与标题中的一致
选择值不必包含完整的显示字段
选择是不区分大小写还是区分大小写
默认情况下是包含,前缀 `!` 表示排除
可以将多个选择标准应用于任务窗口
可以同时使用包含和排除标准
可以将 1 个相等筛选器和 2 个关系筛选器自由混合
为每个任务窗口维护单独的唯一筛选器
如果某个字段未启用或当前未显示,则您的选择标准将不会影响显示。以后,如果筛选字段变为可见,则将应用选择标准。
键盘摘要
O:其他筛选器(大写)
系统将提示您建立区分大小写的筛选器。
o:其他筛选器(小写)
系统将提示您建立在匹配时忽略大小写的筛选器。
^O:显示活动筛选器(Ctrl 键 + `o`)
这可以作为提醒,提醒您“当前”窗口中有哪些筛选器处于活动状态。系统将在消息行上显示摘要,直到您按
=:重置当前窗口中的筛选
这将清除“当前”窗口中的所有选择标准。它还有其他影响,请参阅主题 4a,“全局命令”。
+:重置所有窗口中的筛选
如果处于备用显示模式,这将清除所有窗口中的选择标准。与 = 交互命令一样,它也有其他影响,因此您可能需要查看主题 5b,“窗口命令”。
输入要求
当系统提示您提供选择标准时,您提供的必须采用两种形式之一。这里有 3 个必需信息,还有一个可选信息。这些示例使用空格以提高清晰度,但您的输入通常不会使用空格。 #1 #2 #3 (必需) 字段名 ? 包含值 ! 字段名 ? 排除值 #4 (可选)
项目 #1、#3 和 #4 应该是不言而喻的。项目 #2 同时表示必需的分隔符和运算符,运算符必须是等号 (=') 或关系运算符 (<' 或 `>')。
^ ' 等号运算符只需要部分匹配,这可以减少你的if-value' 输入要求。>' 或<' 关系运算符总是使用字符串比较,即使对于数值字段也是如此。它们设计用于与字段的默认对齐方式和同质数据一起使用。当某些字段的数值已被缩放,而另一些字段则没有,则该数据不再是同质的。
如果你设置了一个关系过滤器,并且你更改了默认的数值或字符对齐方式,则该过滤器很可能会失败。当将关系过滤器应用于内存字段并且你没有更改缩放时,它可能会产生误导性的结果。例如,100.0m' (MiB) 在作为字符串进行比较时,可能会显示大于1.000g' (GiB),这就是发生这种情况的原因。
如果你的过滤结果看起来很可疑,仅仅更改对齐方式或缩放可能仍然可以达到预期的目标。有关更多信息,请参见 j'、J' 和 `e' 交互式命令。
潜在问题
这些 GROUP 过滤器可能会产生完全相同的结果,或者第二个过滤器可能根本不显示任何内容,只是一个空白的任务窗口。 GROUP=root (仅在相同结果时) GROUP=ROOT (通过小写字母 `o' 调用)
这两个 RES 过滤器中的任何一个都可能产生不一致和/或具有误导性的结果,具体取决于当前的内存缩放因子。或者这两个过滤器都可能产生完全相同的结果。 RES>9999 (仅在相同结果时) !RES<10000 (内存缩放设置为 `KiB')
这个 nMin 过滤器说明了一个可缩放字段特有的问题。这个特定字段最多可以显示 4 位数字,超过该数字的值会自动缩放到 KiB 或更高。因此,虽然存在大于 9999 的值,但它们将显示为 2.6m、197k 等。 nMin>9999 (始终显示空白任务窗口)
潜在解决方案
这些示例说明了如何可以创造性地应用其他筛选器以实现几乎任何所需的结果。有时会显示单引号以分隔空格,这些空格是过滤器的一部分,或者表示对状态 (^O) 的准确请求。但是,如果你在实际中使用它们与 ifvalues 一起使用,则不会找到任何匹配项。
假设字段 nTH 已显示,则第一个过滤器将导致仅显示多线程进程。它还提醒我们,每个显示的字段的末尾都有一个空格。第二个过滤器以更少的输入实现完全相同的结果。
!nTH=1 ' (仅为了清晰起见)
nTH>1 (以更少的输入实现相同的结果)
当启用“森林视图”模式并显示“命令”列时,此过滤器有效地折叠子进程,仅显示 3 个级别。
!COMMAND= - ' (仅用于清晰起见)
最后的两个过滤器似乎是对状态请求键 (^O) 的响应。实际上,每个过滤器都需要单独的输入。PR 示例显示了显示优先级为 20 或更高的任务所需的两个并发过滤器,因为其中一些可能是负数。然后,通过利用尾部空格,nMin 系列过滤器可以实现上面讨论的失败的“9999”目标。
PR>20' +!PR=-' ( 2 表示正确结果)
!nMin=0 ' +!nMin=1 ' + !nMin=2 ' +!nMin=3 ' ...
文件
个人配置文件
此文件通过交互式命令“W”创建或更新。
旧版本以 $HOME/.your-name-4-top' +rc' 的形式写入,以句点开头。
新创建的配置文件以 procps/your-name-4-top' + rc' 的形式写入,不以句点开头。procps 目录将是以下目录的子目录:如果设置了绝对路径,则为$XDG_CONFIG_HOME;否则为$HOME/.config。
虽然不打算手动编辑,但以下是其一般布局:global # 第 1 行:程序名称/别名
" # 第 2 行:id、altscr、irixps、delay、curwin
per ea # 第 a 行:winname、fieldscur
window # 第 b 行:winflags、sortindx、maxtasks 等
" # 第 c 行:summclr、msgsclr、headclr、taskclr
global # 第 15 行:其他各种设置
" # 剩余行用于可选的
" # 5e 部分中讨论的“其他过滤器”,以及 6b 部分中讨论的“检查”条目
如果无法建立有效的 rcfile 绝对路径,则将无法保留对正在运行的 top 所做的自定义设置。
添加检查条目 要利用交互式命令“Y”,必须在 top 个人配置文件末尾添加条目。这些条目只是要读取的文件或要执行的命令/管道,其结果将在单独的可滚动、可搜索窗口中显示。
如果您不知道 top rcfile 的位置或名称,请使用交互式命令“W”重写它,并记下这些详细信息。
可以通过重定向 echo 或通过编辑配置文件来添加检查条目。重定向 echo 可能会覆盖 rcfile,因为它会替换(>)而不是附加(>>)到该文件。相反,在使用编辑器时,必须小心不要破坏现有的行,其中一些行可能包含不可打印的数据或不寻常的字符,具体取决于保存该配置文件的 top 版本。
以“#”字符开头的检查条目将被忽略,无论其内容如何。否则,它们由以下 3 个元素组成,每个元素必须用制表符字符(因此,总共 2 个 \t)分隔:
.type: 字面量 `file` 或 `pipe`
.name: “Inspect” 屏幕上显示的选择
.fmts: 表示路径或命令的字符串
这两种类型的“Inspect”条目不能互换。那些指定为 `file` 的条目将使用 `fopen` 访问,并且其 `.fmts` 元素必须引用单个文件。指定为 `pipe` 的条目将使用 `popen`,它们的 `.fmts` 元素可以包含许多管道命令,并且不能包含任何交互式命令。
如果你的 `.fmts` 中表示的文件或管道处理特定的 PID 输入或提示时接受的输入,那么格式字符串也必须包含 `%d` 规范符,如下示例所示。
.fmts= /proc/%d/numa_maps
.fmts= lsof -P -p %d
对于 `pipe` 类型的条目,你可能还希望将标准错误输出重定向到标准输出,以获得更全面的结果。因此,格式字符串变为:
.fmts= pmap -x %d 2>&1
以下是一些示例,展示了这两种类型的“Inspect”条目,它们可能出现在 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
除了上面的注释条目,以下示例展示了如何实现类似的结果,假设 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
如果你创建的任何“inspect”条目产生包含不可打印字符的输出,它们将以 `^C` 表示形式或十六进制 `<FF>` 形式显示,具体取决于其值。这适用于制表符字符,它将显示为 `^I`。如果你想要更真实的表示,任何嵌入的制表符都应该被展开。以下示例展示了如何将原本可能是一个 `file` 条目,但改为使用 `pipe`,以便展开嵌入的制表符。
# 接下来本来可以包含 `\t` ...
# file ^I <你的_名字> ^I /proc/%d/status
# 但这将消除嵌入的 `\t` ...
pipe ^I <你的_名字> ^I cat /proc/%d/status | expand
注意:有些程序可能依赖于 SIGINT 信号来结束。因此,如果建立了如下 `pipe`,则必须使用 Ctrl-C 才能终止它,以便查看结果。这是唯一一次 `^C` 不会同时终止 top 的情况。
pipe ^I Trace ^I /usr/bin/strace -p %d 2>&1
最后,虽然已经讨论过“pipe”类型的条目,以及它们与管道和命令的关系,但没有什么可以阻止你将 shell 脚本也包含在内。甚至可以创建专门用于 `Y' 交互命令的新脚本。
例如,随着你的“Inspect”条目随着时间的推移而增多,“Options:”行在屏幕宽度超出时会被截断。这不会影响操作,除了使某些选择不可见。但是,如果由于截断而丢失了一些选项,但你又想查看更多选项,那么有一个简单的解决方案,如下所示。
检查暂停于 pid ...
使用:左/右箭头键,然后按
顶部 rc 文件中的条目将为“.name”元素提供一个编号,并且“help”条目将标识你编写的用于解释这些编号选择的含义的 shell 脚本。这样,就可以显示更多的选项。
系统配置文件
此配置文件表示未保存自己配置文件的用户的默认配置。其格式与个人配置文件完全相同,也可以包含如上所述的“inspect”条目。
创建它是一个简单的过程。
根据你的安装情况适当配置 top,并使用“W”交互命令保存该配置。
添加并测试任何所需的“inspect”条目。
将该配置文件复制到 /etc 目录中,并将其命名为“topdefaultrc”。
系统限制文件
此文件的存在将影响向普通用户显示哪个版本的帮助屏幕。
更重要的是,它将限制普通用户在 top 运行时可以执行的操作。他们将无法执行以下命令。 k 终止一个任务 r 调整一个任务的优先级 d 或 s 更改延迟/睡眠间隔
此配置文件不是由 top 创建的。相反,它是手动创建的,并将其放置在 /etc 目录中,命名为“toprc”。
它应该正好包含两行,如以下示例所示: s # 第一行:安全模式开关 0 # 第二行:秒为单位的延迟间隔
环境变量
设置以下变量的值并不重要,重要的是它的存在。
LIBPROC_HIDE_KERNEL
这将阻止显示任何内核线程,并将这些进程排除在“任务/线程计数”的摘要区域之外。
一些小技巧
其中许多技巧在赋予 top 调度优先级时效果最好。因此,计划使用 -10 的 nice 值启动它,假设你拥有相应的权限。
内核魔法
对于这些小技巧,top 需要全屏模式。
用户界面,通过提示和帮助,有意暗示延迟间隔限制为十分之一秒。但是,你可以设置任何想要的延迟。如果你想看到 Linux 最佳的调度效果,请尝试延迟为 0.09 秒或更短。
对于此实验,在 x-windows 中打开一个 xterm 并将其最大化。然后执行以下操作: . 通过以下方式提供调度优先级和极小的延迟: nice -n -10 top -d.09 . 保持排序列突出显示关闭,以尽量减少路径长度 . 启用反向行突出显示以进行强调 . 尝试不同的排序列(TIME/MEM 效果很好),以及正常或反向排序,以将最活跃的进程显示在视图中
你将会看到一个非常繁忙的 Linux 系统,它一直在为你做它一直做的事情,但没有可用的程序来演示这一点。
在 white-on-black 颜色模式下的 xterm 中,在 top 的颜色映射屏幕上,将任务颜色设置为黑色,并确保任务高亮设置为粗体,而不是反转。然后,将延迟间隔设置为大约 0.3 秒。
将最活跃的进程带入视图后,你将会看到当前正在运行的任务的幽灵图像。
删除现有的 rc 文件,或者创建一个新的符号链接。启动这个新版本,然后输入 T(一个秘密按键,参见主题 4c。任务区域命令,排序),然后输入 W 和 q。最后,使用 -d0(零延迟)参数重新启动程序。
你的显示将以原来的 top 三倍的速度刷新,速度提高了 300%。当 top 爬升到 TIME 阶梯时,请尽可能保持耐心,并猜测 top 是否会最终到达顶端。
跳动的窗口
对于这些愚蠢的技巧,top 需要使用替代显示模式。
当有 3 或 4 个任务显示窗口可见时,选择除最后一个窗口之外的任何窗口,并使用 i 命令切换来关闭空闲进程。根据你应用 i 命令的位置,有时会显示多个任务窗口跳动,有时则像手风琴一样,因为 top 尽力分配空间。
为每个窗口的摘要行设置不同的内容:一个不显示内存(m);另一个不显示状态(t);也许还有一个什么都不显示,只显示消息行。然后按住 a 或 w,观察跳动窗口的一种变体——跳跃窗口。
显示所有 4 个窗口,然后对于每个窗口,依次使用 i 命令切换来关闭空闲进程。你现在已经进入了“极端跳动”区域。
大鸟窗口
这个愚蠢的技巧也需要使用替代显示模式。
显示所有 4 个窗口,并确保 1:Def 是“当前”窗口。然后,继续使用 n 交互命令增加窗口大小,直到所有其他任务显示窗口都被“推到巢外”。
当它们都被移开后,使用 _ 命令切换来在可见/不可见窗口之间切换。然后思考一下:
top 是在撒谎还是诚实地告诉你你强加的真相?
老换位
这个愚蠢的技巧在不使用替代显示模式的情况下效果最好,因为对齐是按窗口进行的。
启动 top,并使 COMMAND 成为最后一个(最右边的)显示的列。如果需要,使用 c 命令切换来显示命令行,并确保使用 V 命令切换来启用森林视图模式。
然后,使用上/下箭头键将显示定位到显示一些截断的命令行(+ 在最后一个位置)。你可能需要调整 xterm 的大小以产生截断。
最后,使用 j 命令切换,使“COMMAND”列右对齐。
现在使用右箭头键到达“COMMAND”列。继续按右箭头键, 仔细观察命令行的移动方向。
有些行的移动方向向左,有些行的移动方向向右。
最终,所有行的移动方向都会改变,并向右移动。
错误报告
请将错误报告发送至 _.
参见
free(1), ps(1), uptime(1), atop(1), slabtop(1), vmstat(8), w(1)