procps-ng
是一个开源的进程管理工具集,它提供了一系列用于监控和管理系统进程的命令行工具。它是 procps 工具集的一个分支,旨在改进和增强原有的 procps 工具。
procps-ng
包括了一些常用的命令行工具,例如:
ps
:用于查看系统中运行的进程的详细信息,如进程 ID、父进程 ID、进程状态、内存使用情况等。可以使用不同的选项来过滤和排序进程列表。top
:以交互式的方式实时显示系统中运行的进程的资源使用情况,如 CPU 占用率、内存占用率、进程数等。可以通过按键切换不同的排序方式和视图。free
:显示系统内存的使用情况,包括总内存、已使用内存、空闲内存等。还可以显示交换空间的使用情况。kill
:用于终止指定进程。可以使用进程 ID 或进程名称来指定要终止的进程。watch
:周期性地执行指定的命令,并将结果输出到终端,用于实时监控系统状态。可以设置执行间隔和重复次数。
除了这些常见的命令外,procps-ng 还提供了其他一些工具,如pgrep
、pkill
、sysctl
等,用于进程的查找、终止和系统参数的配置等。
procps-ng 工具集的目标是提供简单、易用且功能丰富的进程管理工具,以帮助用户监控和管理系统进程,以及获取系统资源的使用情况。
Linux top
是一个在 Linux 和其他类 Unix 系统上常用的实时系统监控工具。它提供了一个动态的、交互式的实时视图,显示系统的整体性能信息以及正在运行的进程的相关信息。
1. 命令行选项
top -hv | -bcEHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]
-
-h
:显示帮助信息。 -
-v
:显示top
命令的版本信息。 -
-b
:以批处理模式运行top
,将结果输出到标准输出中,适合用于脚本处理。 -
-c
:切换命令行或者程序名称显示。 -
-d
:延迟时间间隔为:-d ss.t,ss单位为秒,t 单位为秒十分之一秒。 -
-E
:指示摘要区域内存单位:-E k | m | g | t | p | e -
-H
:线程模式,按线程维度显示。默认按进程(所有线程的总和)维度显示。 -
-i
:切换闲置进程是否显示。 -
-n
:迭代次数限制(默认无限制)。 -n2, 表示迭代两次后退出。 -
-o
:按照指定字段进行排序, -o fieldname。filedname 可以增加前缀,“-”表示降序,“+”表示升序。 -
-O
:输出所有字段名称,这个选项作为对上述 -o 选项的一种帮助形式,每一行输出一个字段名称。 -
-p
:监视进程ID模式为:-pN1 -pN2 … 或 -pN1,N2,N3 …。仅监视具有指定进程ID的进程。此选项最多可以使用20次,或者一个最多包含20个进程ID的逗号分隔列表。允许混合使用这两种方法。pid值为0将被视为top程序本身的进程id。这只是一个命令行选项,互式命令:= / u / U 都可以恢复监视所有进程。p / u / U 选项是互斥的
。 -
-s
:安全模式。 -
-S
:累计时间切换 以上次记住的 S 状态的相反方式启动 top。当累计时间模式开启时,每个进程都会列出它自己以及其已终止的子进程所使用的 CPU 时间。有关此模式的详细信息,请参阅 S 交互命令。 -
-u | U
:用户筛选模式:-u
后跟用户 ID,-U
后跟用户名。在用户ID或名称前添加感叹号(!
)会指示top仅显示与所提供的用户不匹配的进程。p / u / U 选项是互斥的
。 -
-1
:单次模式,只显示一次,然后退出。 -
-w
:输出宽度覆盖选项:-w [数字]
在批处理模式下,如果没有参数,top将使用 COLUMNS= 和 LINES= 环境变量来格式化输出,如果已设置。否则,宽度将固定为最大的512列。使用参数时,输出宽度可以减小或增大(最多512列),但行数被认为是无限制的。
在正常显示模式下,如果没有参数,top将尝试使用COLUMNS=和LINES=环境变量来格式化输出。使用参数时,输出宽度只能减小,不能增大。无论是使用环境变量还是使用-w选项的参数,在非批处理模式下,实际终端尺寸永远不会超过设定的值。
注意:如果没有使用该命令行选项,输出宽度始终基于调用top的终端,无论是否在批处理模式下。 -
-1
:单个/分离的CPU状态切换。以上次记住的CPU状态部分在摘要区域中反转的方式启动top。根据NUMA节点命令切换(‘2’)的状态,要么所有CPU信息将在一行中显示,要么每个CPU将单独显示。
有关更多信息,请参阅交互命令1
和2
。
2. 运行界面
3. 摘要区域
3.1 UPTIME和LOAD平均值
- 程序或窗口名称,取决于显示模式
- 当前时间和自上次启动以来的时间长度
- 用户总数
- 系统负载(1 分钟、5 分钟、15 分钟内的平均进程数),对于单核CPU 1.0表示满负载
3.2 TASK和CPU状态
此部分至少包含两行。在SMP环境中,额外的行可以反映各个CPU的状态百分比。
第一行显示总任务或线程数量,取决于线程模式切换的状态。该总数进一步分为:
- 总任务数
- 运行任务数
- 睡眠任务数
- 停止任务数
- 僵尸任务数
第二行显示自上次刷新以来的CPU状态百分比。
在默认情况下,系统会显示这些各个类别的百分比。如果有两个标签显示在下面,那么较新版本的内核的标签将首先显示。这是为了确保用户能够看到更适用于他们使用的较新内核版本的相关信息
- us, user:运行未降低优先级的用户进程的时间
- sy, system:运行内核进程的时间
- ni, nice:运行降低优先级的用户进程的时间
空闲 CPU 的百分比(id, idle)
- wa, IO-wait:等待I/O完成的时间
- hi:服务于硬件中断的时间
- si:服务于软件中断的时间
- st:虚拟机被虚拟化程序窃取的时间
在备选的CPU状态显示模式中,在第一行任务/线程之外,还显示了一个简略的摘要,其中包含以下元素:
a b c d
%Cpu(s): 75.0/25.0 100[ ...
- a: 是us和ni的组合百分比;
- b :是sy的百分比;
- c: 是总百分比;
- d: 是这些表示的两个视觉图表之一。
这些元素提供了关于CPU使用情况的汇总信息,包括用户进程、系统进程和总体使用情况的百分比。其中的视觉图表可以更直观地表示这些百分比。
3.3 内存使用情况
这部分包括两行,根据使用E
交互命令强制执行的缩放因子,可以使用kibibytes(KiB)到exbibytes(EiB)来表示值。
默认情况下,第一行反映物理内存,分为:
- 总内存
- 空闲内存
- 已使用内存
- 缓存/缓冲区
第二行反映主要是虚拟内存,分为:
- 总虚拟内存
- 空闲虚拟内存
- 已使用虚拟内存
- 可用内存(即物理内存)
第二行中的可用数是估计的可用于启动新应用程序的物理内存,而不进行交换。与free字段不同,它尝试考虑可立即回收的页缓存和内存块。在内核3.14上可用,在2.6.27+的内核上进行模拟,否则与free相同。
在备选的内存显示模式中,显示了两个简略的摘要行,其中包含以下元素:
a b c
GiB Mem : 18.7/15.738 [ ...
GiB Swap: 0.0/7.999 [ ...
其中:a) 是已使用的百分比;b) 是总可用内存;c) 是这些表示的两个视觉图表之一。
对于物理内存,百分比表示总内存减去上述估计的可用内存。Mem
图表本身被分为已使用和除了可用内存之外的剩余内存。
下表可能有助于解释显示的缩放值:
- KiB = kibibyte = 1024字节
- MiB = mebibyte = 1024 KiB = 1,048,576字节
- GiB = gibibyte = 1024 MiB = 1,073,741,824字节
- TiB = tebibyte = 1024 GiB = 1,099,511,627,776字节
- PiB = pebibyte = 1024 TiB = 1,125,899,906,842,624字节
- EiB = exbibyte = 1024 PiB = 1,152,921,504,606,846,976字节
4. 任务区域
4.1 字段描述
以下是top命令可用的进程字段(列)的描述。它们按严格的ASCII字母顺序显示。您可以使用f'或
F’(字段管理)交互命令自定义它们的位置和是否可显示。
任何字段都可以选择为排序字段,您可以控制它们是从高到低还是从低到高排序。
与物理内存或虚拟内存相关的字段引用了“(KiB)”,这是无后缀的显示模式。但是,这些字段可以使用交互命令“e”进行切换。
-
%CPU:CPU 使用率
任务在自上次屏幕更新以来经过的CPU时间中所占的份额,以占总CPU时间的百分比表示。在真正的多处理器(SMP)环境中,如果一个进程是多线程的,并且top不是在线程模式下运行,那么可能会报告大于100%的数量。您可以使用“H”交互命令切换线程模式。
同样对于多处理器环境,如果Irix模式为关闭,top将在Solaris模式下运行,其中任务的cpu使用率将除以cpu总数。您可以使用“I”交互命令切换Irix/Solaris模式。
注意:当在森林视图(forest view)模式(“V”)下运行且子级折叠(“v”)时,该字段还将包括那些看不见的子级的CPU时间。
-
%MEM:内存使用率
任务当前占用的可用物理内存份额。 -
CGNAME:Control Group Name
进程所属的控制组的名称,如果对该进程不适用则为
-
。这通常是完整的控制组列表中的最后一个条目,如下一标题(CGROUPS)所示。与那里一样,这个字段的宽度也是可变的。
-
CGROUPS -- Control Groups
进程所属的对照组的名称,如果不适用于该进程,则为-。控制组用于在installation-defined进程组之间分配资源(cpu、内存、网络带宽等)。它们能够对分配、拒绝、优先化、管理和监控这些资源进行细粒度控制。
许多不同的cgroup层次结构可以同时存在于一个系统上,每个层次结构都附加到一个或多个子系统上。子系统代表单个资源。
注意:CGROUPS字段与大多数列不同,它不是固定宽度的。当显示时,它加上任何其他可变宽度列将被分配所有剩余的屏幕宽度(最大512个字符)。即使如此,这些可变宽度字段仍然可能会被截断。
-
CODE -- Code Size (KiB)
当前用于执行代码的物理内存量,也称为文本常驻集大小或TRS -
COMMAND -- Command Name or Command Line
显示用于启动任务的命令行或关联程序。您可以使用’c’在命令行和名称之间切换 ‘c’,它既是命令行选项又是交互式命令。当您选择显示命令行时,没有命令行的进程(如内核线程)将仅显示括号中的程序名称,如:[kthreadd]
该字段也可能受到森林视图显示模式的影响。有关该模式的更多信息,请参阅“V”交互式命令。
注意:与大多数列不同,COMMAND字段不是固定宽度的。显示时,它加上任何其他可变宽度列将被分配所有剩余的屏幕宽度(最多512个字符)。 即便如此,这种可变宽度的字段仍然可能会被截断。当显示命令行('c’交互式命令)时,此字段尤其如此。
-
DATA -- Data + Stack Size (KiB)
进程保留的私有内存量。它也称为数据驻留集或DRS。此类内存可能尚未映射到物理内存(RES),但将始终包含在虚拟内存(VIRT)量中。 -
ENVIRON -- Environment variables
显示各个进程看到的所有环境变量(如果有的话)。这些变量将以它们的原始原生顺序显示,而不是您习惯于看到的带有非限定“集合”的排序顺序。注意:与大多数列不同,ENVIRON字段不是固定宽度的。 显示时,它加上任何其他可变宽度列将被分配所有剩余的屏幕宽度(最多512个字符)。即便如此,这种可变宽度的字段仍然可能会被截断。
-
Flags -- Task Flags
此列表示任务的当前调度标志,这些标志以十六进制表示法表示并抑制零。这些标志正式记录在<linux/sched. h>中。 -
GID -- Group Id
有效的组ID。 -
GROUP -- Group Name
有效的组名。 -
LXC -- Lxc Container Name
运行任务的lxc容器的名称。如果一个进程不在容器内运行,破折号 (`-') 将显示。 -
NI -- Nice Value
任务的nice值。较低的Nice Value表示较高的优先级,即进程更容易获得CPU时间片,而较高的Nice Value表示较低的优先级,进程获得CPU时间片的机会较少。 -
NU -- Last known NUMA node
表示与最后使用的处理器(“P”)相关的NUMA节点的数字。当显示-1时,表示NUMA信息不可用。 -
OOMa -- Out of Memory Adjustment Factor
内存不足调整因子。该值范围从-1000到+1000,添加到当前内存溢出分数(OOMs)中,然后用于确定内存耗尽时要杀死哪个任务。 -
OOMs -- Out of Memory Score
内存不足Score。该值范围从0到+1000,用于在内存耗尽时选择要杀死的任务。零意味着“永不杀死”,而1000意味着“总是杀死”。 -
P -- Last used CPU (SMP)
代表最后使用的处理器的数字。在真正的SMP环境中,这可能会经常变化,因为内核故意使用弱亲和力。此外,运行top的行为可能会打破这种弱亲和力,并导致更多的进程更频繁地更改CPU(因为对cpu时间的额外需求)。 -
PGRP -- Process Group Id
每个进程都是一个唯一的进程组的成员,该进程组用于分配信号,并由终端仲裁对其输入和输出的请求。当一个进程被创建(forked)时,它成为其父进程组的成员。按照惯例,这个值等于进程组第一个成员的进程ID(参见PID),称为进程组组长。 -
PID -- Process Id
任务唯一的进程ID,它定期换行,但从不在零重新启动。在内核术语中,它是由task_struct定义的可调度实体。该值还可以用作:进程组ID(参见PGRP);会话领导者的会话ID(参见SID);线程组领导者的线程组ID(参见TGID);以及进程组领导者的TTY进程组ID(参见TPGID)。
-
PPID -- Parent Process Id
任务父级的进程ID(pid)。 -
PR -- Priority
任务的调度优先级。如果在此字段中看到“rt”,则表示任务正在实时调度优先级下运行。在linux下,实时优先级有点误导,因为传统上操作本身是不可抢占的,虽然2.6内核可以大部分是可抢占的,但并不总是如此。
-
RES -- Resident Memory Size (KiB)
物理内存量。虚拟地址空间(VIRT)的子集,表示任务当前使用的未交换物理内存。它也是RSan、RSfd和RSsh字段的总和。它可以包括私有匿名页、映射到文件(包括程序映像和共享库)的私有页以及共享匿名页,所有这些内存都由SWAP下单独表示的交换文件支持。
最后,该字段还可能包括共享文件支持的页面,这些页面在修改时充当专用交换文件,因此永远不会影响交换。
-
RSan -- Resident Anonymous Memory Size (KiB)
驻留内存(RES)的子集,表示未映射到文件的私有页。 -
RSfd -- Resident File-Backed Memory Size (KiB)
常驻内存(RES)的子集,隐式表示支持程序图像和共享库的共享页面。它还包括显式文件映射,包括私有和共享。 -
RSlk -- Resident Locked Memory Size (KiB)
无法换出的常驻内存(RES)子集。 -
RSsh -- Resident Shared Memory Size (KiB)
驻留内存(RES)的子集,显式表示共享匿名shm*/mmap页面。 -
RUID -- Real User Id
真实的用户ID。 -
RUSER -- Real User Name
真实的用户名。 -
S -- Process Status
任务的状态可以是以下之一:- D: 不间断睡眠(uninterruptible sleep)
- I: 闲置(idle)
- R: 运行(running)
- S: 睡觉(sleeping)
- T: 被作业控制信号停止(stopped by job control signal)
- t: 在跟踪期间被调试器停止(stopped by debugger during trace)
- Z: 僵尸(zombie)
显示为正在运行的任务应该更恰当地被认为是准备运行的——它们的task_struct简单地表示在Linux运行队列中。即使没有真正的SMP机器,您也可能会看到许多处于这种状态的任务,这取决于top的延迟间隔和nice值。
-
SHR -- Shared Memory Size (KiB)
可供其他进程使用的驻留内存(RES)子集。它将包括共享匿名页和共享文件支持页。它还包括映射到表示程序映像和共享库的文件的私有页。 -
SID -- Session Id
会话是进程组的集合(参见PGRP),通常由login shell建立。一个新fork的进程加入其创建者的会话。按照惯例,这个值等于会话第一个成员的进程标识(参见PID),该成员被称为session leader,通常是login shell。 -
SUID -- Saved User Id
保存的用户ID。 -
SUSER -- Saved User Name
保存的用户名。 -
SUPGIDS -- Supplementary Group IDs
登录时建立的或从任务的父级继承的任何补充组的ID。它们显示在逗号分隔的列表中。注意:SUPGIDS字段与大多数列不同,它不是固定宽度的。当显示时,它加上任何其他可变宽度列将被分配所有剩余的屏幕宽度(最大512个字符)。即使如此,这些可变宽度字段仍然可能会被截断。
-
SUPGRPS -- Supplementary Group Names
登录时建立的或从任务的父级继承的任何补充组的名称。它们显示在逗号分隔的列表中。注意:与大多数列不同,SUPGRPS字段不是固定宽度的。显示时,它加上任何其他可变宽度列将被分配所有剩余的屏幕宽度(最大512个字符)。即使如此,这种可变宽度字段仍然可能被截断。
-
SWAP -- Swapped Size (KiB)
当物理内存过度提交时,写入交换文件的任务地址空间的先前驻留部分。 -
TGID -- Thread Group Id
任务所属的线程组的ID。它是线程组领导者的PID。在内核术语中,它表示共享mm_struct的任务 -
TIME -- CPU Time
任务自启动以来使用的总CPU时间。当累积模式为开启时,每个进程都会列出它及其死子进程使用的cpu时间。您可以用“S”切换累积模式,“S”既是命令行选项,也是交互式命令。有关此模式的其他信息,请参见“S”交互式命令。 -
TIME+ -- CPU Time, hundredths
与TIME
相同,但通过一秒钟的时间反映更多的颗粒度。 -
TPGID -- Tty Process Group Id
连接的tty的前台进程的进程组ID,如果进程没有连接到终端,则为-1。按照惯例,该值等于进程组负责人的进程ID(参见PID)(参见PGRP)。
-
TTY -- Controlling Tty
控制终端的名称。这通常是启动进程并用于输入或输出的设备(串口、pty等)。然而,任务不需要与终端相关联,在这种情况下,您会看到“?”显示。 -
UID -- User Id
任务所有者的有效用户ID。 -
USED -- Memory in Use (KiB)
该字段表示任务正在使用的非交换物理内存(RES)加上其地址空间的交换出去部分(SWAP)。 -
USER -- User Name
任务所有者的有效用户名。 -
VIRT -- Virtual Memory Size (KiB)
任务使用的虚拟内存总量。它包括所有代码、数据和共享库,以及已换出的页面和已映射但未使用的页面。 -
WCHAN -- Sleeping in Function
此字段将显示任务当前休眠的内核函数的名称。正在运行的任务将在此列中显示一个破折号 (`-') 。 -
nDRT -- Dirty Pages Count
自上次写入辅助存储器以来被修改的页数。脏页必须写入辅助存储器,然后相应的物理内存位置才能用于其他虚拟页。
此字段在linux2.6中已弃用,始终为零。 -
nMaj -- Major Page Fault Count
任务发生的主要页错误数。当进程试图读取或写入当前不在其地址空间中的虚拟页时,就会出现页错误。主要页错误是在使该页可用时涉及辅助存储访问。 -
nMin -- Minor Page Fault count
任务发生的次要页错误的数量。当进程试图读取或写入当前不在其地址空间中的虚拟页时,就会发生页错误。次要页错误不涉及辅助存储访问以使该页可用。 -
nTH -- Number of Threads
与进程关联的线程数。 -
nsIPC -- IPC namespace
命名空间的Inode用于隔离文件系统挂载点,从而提供文件系统层次结构的不同视图。 -
nsMNT -- MNT namespace
命名空间的Inode用于隔离文件系统挂载点,从而提供文件系统层次结构的不同视图。 -
nsNET -- NET namespace
命名空间的Inode,用于隔离网络设备、IP地址、IP路由、端口号等资源。 -
nsPID -- PID namespace
命名空间的Inode用于隔离进程ID号,这意味着它们不需要保持唯一。因此,每个这样的命名空间都可以有自己的“init/systemd”(PID#1)来管理各种初始化任务和获取孤立的子进程。 -
nsUSER -- USER namespace
用于隔离用户和组ID号的名称空间的Inode。因此,进程可以在用户名称空间之外具有正常的非特权用户ID,而在该名称空间内具有完全根权限的用户ID为0。 -
nsUTS -- UTS namespace
用于隔离主机名和NIS域名的命名空间的Inode。UTS的简单意思是“UNIX分时系统”。 -
vMj -- Major Page Fault Count Delta
自上次更新以来发生的主要页面错误的数量(参见nMaj)。 -
vMn -- Minor Page Fault Count Delta
自上次更新以来发生的次要页面错误的数量(参见nMin)。
4.2 字段管理
按下交互式命令“f”或“F”(字段管理)后,您将看到一个屏幕,显示:
1)“当前”窗口名称;
2)指定的排序字段;
3)当前顺序的所有字段以及描述。
在屏幕宽度允许的情况下,标有星号的条目是当前显示的字段。
- 如屏幕指示所示,您可以使用向上和向下箭头键在字段之间导航。PgUp、PgDn、Home和End键也可用于快速到达第一个或最后一个可用字段。
- 右箭头键选择要重新定位的字段,左箭头键或键提交该字段的位置。
- 'd’键或空格键可以切换字段的显示状态,从而切换星号的存在与否。
- 's’键指定一个字段作为排序字段。有关选择排序字段的更多信息,任务区域命令,排序。
- 'a’和’w’键可用于在所有可用窗口中循环,'q’或键退出字段管理。
字段管理屏幕还可用于以全屏模式或交替显示模式更改当前窗口/字段组。当您返回顶部显示时,按下“q”或“Esc”时的目标将变为当前。
注意:如果通过字段管理屏幕进行任何字段更改,任何水平滚动的窗口都将被重置。但是,任何垂直滚动的位置都不会受到影响。有关垂直和水平滚动的更多信息,请参见滚动窗口。
5. 交互命令
下面列出了类别中命令的简要索引。有些命令出现不止一次——它们的含义或范围可能会因发布它们的上下文而异。
全局命令
<Ent/Sp> ?, =, 0,
A, B, d, E, e, g, h, H, I, k, q, r, s, W, X, Y, Z摘要区域命令
C, l, t, m, 1, 2, 3任务区命令
外观
:b, J,j,x,y,z
内容
:c, f,F,o,O,S,u,U,V,v
尺寸
:#, i,n
排序
: <, >, f, F,R颜色映射
, 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, &
5.1 全局命令
全局交互命令在全屏模式和轮换显示模式下始终可用。但是,其中一些交互命令在安全模式下运行时不可用。
如果您想提前了解您的top命令是否已经被保护,只需请求帮助并查看第二行的系统摘要。
-
<Enter> 或 <Space>
:刷新-显示
这些命令唤醒top并在收到任何输入后重新绘制整个显示器。它们还强制更新任何热插拔cpu或物理记忆更改。
如果您有较大的延迟区间并希望查看当前状态,请使用这些键中的任何一个。 -
? | h
:帮助
有两个可用的帮助级别。第一个将提供所有基本交互命令的提醒。如果top已被保护,该屏幕将被缩短。
在帮助屏幕上键入’h’或’?'将带您帮助那些适用于轮换显示模式的交互式命令。 -
=
:退出任务限制
删除显示任务的限制。此命令将反转任何可能处于活动状态的“i”(空闲任务)、“n”(最大任务)和“v”(隐藏任务)命令。它还提供退出PID监控、用户过滤、其他过滤和定位处理。
此外,如果窗口已滚动,它将使用此命令重新设置。
-
0
:零抑制切换
此命令确定任务窗口中的许多字段是否显示或抑制零。UID、GID、NI、PR或P等字段不受此切换的影响。 -
A
:显示模式切换
此命令将在全屏模式和Alternate模式之间进行切换。 -
B
:粗体-禁用/启用切换
此命令将影响粗体终止功能的使用,并更改“当前”窗口的摘要区域和任务区域。虽然它主要用于terminals,但它可以随时应用。注意:当此切换为打开且top以单色模式运行时,整个显示将显示为正常文本。因此,除非“x”和/或“y”切换使用反向强调,否则不会有视觉确认它们是否打开。
-
* d | s
:更改延迟时间间隔
更改延迟时间,以秒为单位。
支持分数秒,但不允许输入负数。输入0会导致(几乎)持续更新,由于系统和tty驱动器试图跟上top的需求,显示效果不佳。延迟值与系统负载成反比,因此请谨慎设置。
如果您想知道当前的延迟时间,只需在帮助页面查看第二行的系统摘要。 -
E
:摘要区域扩展内存比例
使用此命令,您可以循环浏览可用的摘要区域内存比例,范围从KiB(kibibytes 或1,024字节)到EiB。如果在显示的数字和后面的标签之间看到“+”,这意味着top被迫截断了该数字的一部分。通过提高比例因子,可以避免这种截断。
-
e
:任务窗口中的扩展记忆缩放
使用此命令,您可以循环浏览可用的任务窗口内存比例,范围从KiB(kibibytes 或1,024字节)到PiB。虽然top会尽量遵守所选的目标范围,但可能仍需要额外的缩放以容纳当前值。如果您希望在内存列中看到更均匀的结果,提高缩放范围通常会实现这一目标。然而,将其提高得太高可能会产生全零结果,这是无法通过“0”交互命令抑制的。
使用此命令,您可以循环完成可用的任务win-dow记忆缩放,范围从KiB(kibibytes或1,024字节)到PiB。
-
H
:线程模式切换
当此切换打开时,所有可见任务窗口中的所有进程将显示各个线程。否则,top将显示每个进程中所有线程的总和。 -
I
: Irix/Solaris-Mode切换
在Solaris模式(`I’切换关闭)下运行时,任务的CPU使用率将被总CPU数除以。发出此命令后,您将得知此切换的新状态。 -
* k
: 终止任务
您将被提示输入PID和要发送的信号。
输入无PID或负数将被解释为提示中显示的默认值(显示的第一个任务)。PID值为零表示top程序本身。
默认信号,如提示中所示,为SIGTERM。但是,您可以通过数字或名称发送任何信号。
如果您希望中止终止进程,请根据您的进度执行以下操作之一:
1)在pid提示处,键入无效数字
2)在信号提示处,键入0(或任何无效信号)
3)在任何提示处,键入<Esc>
-
q
:退出 -
r
:更改任务优先级
您将被提示输入PID,然后输入要调整的值。
输入无PID或负数将被解释为提示中显示的默认值(显示的第一个任务)。PID值为零表示top程序本身。
正nice值将导致一个进程失去优先级。相反,负nice值将导致一个进程被内核更看好。通常情况下,普通用户只能增加nice值,而不能降低它。
如果您希望中止renice过程,请根据您的进度执行以下操作之一:
1)在pid提示处,键入无效数字
2)在nice提示处,不输入任何内容,直接按
3)在任何提示处,键入<Esc>
-
W
:写入配置文件
这将保存您的所有选项和切换,以及当前的显示模式和延迟时间。在退出top之前执行此命令,您将能够在以后以完全相同的状态重新启动。 -
X
:额外固定宽度
某些字段是固定宽度且不可扩展的。因此,它们可能会被截断,这会在最后一个位置用“+”表示。
这个交互式命令可用于更改以下字段的宽度:字段 默认宽度 字段 默认宽度 字段 默认宽度 GID 5 GROUP 8 WCHAN 10 RUID 5 LXC 8 nsIPC 10 SUID 5 RUSER 8 nsMNT 10 UID 5 SUSER 8 nsNET 10 TTY 8 nsPID 10 USER 8 nsUSER 10 nsUTS 10
您将被提示输入要添加到上述默认宽度的数量。输入零将强制返回到这些默认值。
如果您输入负数,top将自动增加列大小,直到没有更多的截断数据。您可以通过减少延迟间隔或按住键来加快此过程。
注意:无论是明确地还是自动地增加,这些字段的宽度都不会被top减小。要缩小它们,您必须指定一个较小的数字或恢复默认值。 -
Y
:检查其他输出
在执行“Y”交互命令后,您将被提示输入目标PID。输入一个值或接受默认值将导致一个单独的屏幕。该屏幕可用于在正常的top迭代显示暂停时查看各种文件或管道命令输出。
注意:只有在手动添加了支持条目到top配置文件的末尾时,这个交互式命令才会完全实现。
大多数用于导航检查功能的键都反映在其标题序言中。但是,一旦您选择了特定的文件或命令,就会有额外的可用键。对于任何使用过分页器“less”的人来说,它们都很熟悉,并在此进行总结以供以后参考。key 功能 = 替代状态行、文件或管道 / 查找,等同于“L” n 查找下一个,等同于“&” <Space> 向下滚动,相当于<PgDn> b 向上滚动,相当于<PgUp> g 第一行,相当于<Home> G 最后一行,相当于<End>
-
Z
:更改颜色映射
这个键会带你到一个单独的屏幕,你可以在这里改变“当前”窗口的颜色,或者所有窗口的颜色。
带星号(*
)的命令在安全模式下不可用,也不会在一级帮助屏幕上显示。
5.2 摘要区域命令
摘要区交互命令在全屏模式和alternate-display模式下始终可用。它们影响显示的起始行,并确定消息和提示的位置。
这些命令总是只影响“当前”窗口/字段组。
-
C
:显示滚动坐标切换
切换一个信息消息,当消息行没有被使用时会显示。 -
l
:负载平均值/正常运行时间切换
这也是包含程序名称(可能是别名)的行,当在全屏模式下操作时,或者在备用显示模式下操作时是“当前”窗口名称。 -
t
:任务/CPU状态切换
此命令影响从2到多个摘要区行,取决于“1”、“2”或“3”命令切换的状态,以及top是否在真正的SMP下运行。摘要区的这部分也受到“H”交互式命令切换的影响,如总标签所反映的,它显示任务或线程。
此命令作为4种切换方式,循环切换这些模式:
- 按类别详细百分比
- 简略的用户/系统和总% + 条形图
- 简略的用户/系统和总% + 块图
- 关闭任务和CPU状态显示
当在任何图形模式下操作时,当显示个别CPU或NUMA节点时,显示变得更有意义。
-
m
:内存/交换使用切换
此命令影响处理物理和虚拟内存的两个摘要区行。此命令作为4种切换方式,循环切换这些模式:
- 按内存类型详细百分比
- 简略的%使用/总可用 + 条形图
- 简略的%使用/总可用 + 块图
- 关闭内存显示
-
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”命令切换。此交互式命令仅在系统具有所需的NUMA支持时可用。
注意:如果整个摘要区已经被切换关闭,您将只剩下消息行。这样,您将最大化可用的任务行,但(暂时)牺牲了全屏模式下的程序名称,或者在备用显示模式下的“当前”窗口名称。
5.3 任务区域命令
任务区域的交互式命令在全屏模式下始终可用。
如果“当前”窗口的任务显示已被关闭(参见备用显示规定),则任务区域的交互式命令在备用显示模式下永远不可用。
任务窗口的外观
-
J
:数字列对齐切换
在右对齐(默认)和左对齐数字数据之间切换。如果数字数据完全填满可用列,此切换命令可能仅影响列标题。 -
j
:字符列对齐切换
在左对齐(默认)和右对齐字符数据之间切换。如果字符数据完全填满可用列,此切换命令可能仅影响列标题。
以下命令还会受全局“B”(加粗启用)切换状态的影响。
-
b
:加粗/反转切换
此命令将影响“x”和“y”切换的显示。当通过“t”或“m”切换选择了CPU状态或内存使用的条形图时,它也可能影响摘要区。 -
x
:列高亮切换
更改当前排序字段的高亮显示。如果您忘记了正在排序的字段,此命令可以作为快速的视觉提醒,前提是正在显示排序字段。排序字段可能不可见,因为:
1)屏幕宽度不足
2)“f”交互式命令将其关闭
注意:每当在窗口中激活搜索和/或其他过滤时,列高亮会被临时禁用。
-
y
:行高亮切换
更改“运行中”任务的高亮显示。要了解此任务状态的更多信息,请参见字段描述,“S”字段(进程状态)
使用此功能可以重要地了解系统的健康状况。唯一的成本将是一些额外的tty转义序列。 -
z
:彩色/单色切换
在您上次使用的彩色方案和旧的黑白或白黑色形式之间切换“当前”窗口。此命令将改变摘要区和任务区的外观,但不影响“x”、“y”或“b”切换的状态。
任务窗口内容
-
c
:命令行/程序名称切换
无论COMMAND列当前是否可见,此命令都将被执行。稍后,如果该字段出现在视图中,您所做的更改将会显示出来。 -
f | F
:字段管理
这些键显示一个单独的屏幕,您可以在其中更改要显示的字段、它们的顺序,并指定排序字段。有关这些交互式命令的更多信息,请参阅字段管理。 -
o | O
:其他过滤
您将被提示选择条件,然后确定“当前”窗口中将显示哪些任务。您的条件可以区分大小写,也可以忽略大小写。您还可以确定top是否应包括或排除匹配的任务。
有关这些和其他相关的交互式命令的详细信息,请参阅窗口过滤。 -
S
:累积时间模式切换
当累积模式打开时,每个进程都将列出它和其已终止的子进程使用的CPU时间。
关闭时,分叉为许多独立任务的程序看起来要求较少。对于像“init”或shell这样的程序,这是合适的,但对于编译器等其他程序可能不是。尝试两个具有相同排序字段但具有不同“S”状态的任务窗口,并查看您喜欢哪种表示。
发出此命令后,您将收到有关此切换的新状态的通知。如果您希望事先了解累积模式是否生效,只需请求帮助并查看第二行的窗口摘要即可。 -
u | U
:仅显示特定用户
您将被提示输入要显示的用户的UID或名称。-u选项匹配有效用户,而-U选项匹配任何用户(真实、有效、保存或文件系统)。
此后,在该任务窗口中只会显示匹配的用户,或者可能不会显示任何进程。在用户ID或名称前加上感叹号(“!”)指示top仅显示与提供的用户不匹配的进程。
不同的任务窗口可以用于过滤不同的用户。稍后,如果您希望在“当前”窗口中再次监视所有用户,则重新发出此命令,但在提示处只需按<Enter>
键。 -
V
:树状视图模式切换
在此模式下,进程将根据其父进程重新排序,并且COMMAND列的布局类似于树的形式。在树状视图模式下,仍然可以在程序名称和命令行之间切换(参见“c”交互式命令)或在进程和线程之间切换(参见“H”交互式命令)。
注意:输入任何影响排序顺序的键将退出“当前”窗口中的森林视图模式。有关这些键的信息,请参阅任务区命令,排序。 -
v
:隐藏/显示子项切换
在森林视图模式下,此键可用作父级进程的子项折叠或展开切换。
切换将应用于“当前”窗口中的第一个(顶部)进程。有关垂直滚动的附加信息,请参见滚动窗口。
如果目标进程没有派生任何子进程,则此键无效。在非森林视图模式下,它也无效。
任务窗口大小
-
i
:空闲进程切换
显示所有任务或仅活动任务。当此切换关闭时,自上次更新以来未使用任何CPU的任务将不会显示。但是,由于%CPU和TIME+字段的粒度,可能仍会显示一些看似未使用CPU的进程。
如果将此命令应用于替代显示模式下的最后一个任务显示,则它不会影响窗口的大小,因为所有先前的任务显示都已经被绘制。 -
n | #
:设置最大任务数
您将被提示输入要显示的任务数。您输入的数量和可用的屏幕行数中的较小者将被使用。
在替代显示模式下使用时,此命令可精确控制每个当前可见任务显示的大小,除了最后一个。它不会影响最后一个窗口的大小,因为所有先前的任务显示都已经被绘制。
注意:如果您希望增加替代显示模式下最后一个可见任务显示的大小,只需减小其上的任务显示的大小。
任务窗口的排序
为了兼容性,此top支持大多数以前的top排序键。由于这主要是为以前的top用户提供服务,因此这些命令不会出现在任何帮助屏幕上。
命令 排序字段 是否支持
A start time (non-display) 否
M %MEM 是
N PID 是
P %CPU 是
T TIME+ 是
在使用以下任何排序规定之前,top建议您使用“x”交互命令暂时打开列突出显示。这将有助于确保实际的排序环境与您的意图相匹配。
只有当当前的排序字段可见时,才会执行以下交互式命令。排序字段可能不可见,因为:
1)屏幕宽度不足
2)“f”交互式命令将其关闭
-
<
:将排序字段向左移动
除非当前排序字段是正在显示的第一个字段,否则将排序列向左移动。 -
>
:将排序字段向右移动
除非当前排序字段是正在显示的最后一个字段,否则将排序列向右移动。
无论当前排序字段是否可见,都将执行以下交互式命令。
-
f | F
:字段管理
这些键显示一个单独的屏幕,您可以在其中更改要用作排序列的字段,以及其他功能。当使用关闭列突出显示的top运行时,这可以是一种简单验证当前排序字段的便捷方式。 -
R
:反向/正常排序字段切换
使用此交互式命令,您可以在高到低和低到高之间交替排序。
注意:字段排序使用内部值,而不是列显示中的值。因此,TTY和WCHAN字段将违反严格的ASCII排序序列。
5.4 颜色映射
当您发出“Z”交互式命令时,将显示一个单独的屏幕。该屏幕可用于更改“当前”窗口或在返回顶部显示之前更改所有四个窗口中的颜色。
可用以下交互式命令
4个大写字母选择目标
8个数字选择颜色
正常切换可用
B:粗体禁用/启用
b:运行任务“粗体”/反向
z:彩色/单色
其他命令可用
a / w:应用,然后转到下一个/上一个
`<Enter>`:应用并退出
q:放弃当前更改并退出
如果使用“a”或“w”循环目标窗口,则将应用离开该窗口时显示的颜色方案。当然,您可以轻松返回任何窗口,并使用“z”切换重新应用不同的颜色或完全关闭颜色。
颜色映射屏幕也可用于在全屏模式或交替显示模式下更改“当前”窗口/字段组。在按下“q”或<Enter>
时定位的任何内容都将在返回顶部显示时成为当前内容。
6. 备用显示功能 (ALTERNATE-DISPLAY Provisions)
6.1 Windows 概述
字段组/窗口:
在全屏模式下,整个屏幕代表一个单一窗口。这个单一窗口仍然可以改变为显示4个不同的字段组(参见下面的`g’交互命令)。这4个字段组中的每一个都有一个独特的可配置摘要区域和自己可配置的任务区域。
在备用显示模式下,这4个基础字段组现在可以同时可见,或者可以根据您的命令分别关闭。
摘要区域将始终存在,即使只是消息行。在任何给定时间,只有一个摘要区域可以显示。然而,根据您的命令,屏幕上可能会显示从零到四个单独的任务显示。
当前窗口:
“当前”窗口是与摘要区域相关联的窗口,也是始终指向任务相关命令的窗口。由于在备用显示模式中,您可以切换任务显示关闭,因此某些命令可能会受到限制。
当您将第一摘要区域行关闭时,会出现进一步的复杂情况。随着窗口名称的丢失('l’切换行),您将不容易知道哪个窗口是“当前”窗口。
6.2 窗口命令
-
- | _
:显示/隐藏-窗口(s) 切换
“-” 键用于打开和关闭“当前”窗口的任务显示。在打开时,该任务区域将显示您使用“f”交互命令建立的最小列标题。它还将反映您应用的任何其他任务区域选项/切换,产生零个或多个任务。
“_”键对所有任务显示执行相同的操作。换句话说,它在当前可见的任务显示和您关闭的任何任务显示之间切换。如果当前有4个任务显示都可见,这个交互命令将使摘要区域成为唯一的显示元素。 -
* = | +
:平衡-(重新初始化)窗口(s)
=
键强制“当前”窗口的任务显示可见。它还会撤销任何活动的i'(空闲任务)、
n’(最大任务)、u/U'(用户过滤器)、
o/O’(其他过滤器)、v'(隐藏子任务)和
L’(定位)命令。此外,如果窗口已经滚动,使用此命令将重置滚动。
+
键对所有窗口执行相同的操作。四个任务显示将重新出现,均衡显示。它们还将保留您之前应用的任何自定义设置,但不包括i'(空闲任务)、
n’(最大任务)、u/U'(用户过滤器)、
o/O’(其他过滤器)、v'(隐藏子任务)、
L’(定位)和滚动交互命令。 -
* A
:备用显示模式切换
这个命令将在全屏模式和备用显示模式之间切换。
第一次发出此命令时,所有四个任务显示将被显示。之后,当您切换模式时,您将只看到您选择可见的任务显示。 -
* a | w
:下一个窗口前进/后退
这将改变“当前”窗口,进而改变命令所指向的窗口。这两个键以循环方式运行,因此您可以使用任一键到达任何所需的窗口。
假设窗口名称是可见的(您没有关闭l
),每当“当前”窗口名称失去重点/颜色时,这就是任务显示关闭的提醒,许多命令将受到限制。 -
* g
:选择另一个窗口/字段组
您将被提示输入一个数字,介于1和4之间,指定应该成为“当前”窗口的字段组。
在全屏模式下,这个命令是必要的,以改变“当前”窗口。在备用显示模式下,它只是一个不太方便的替代a'和
w’命令。 -
G
:更改窗口/字段组名称
您将被提示输入一个新名称,应用于“当前”窗口。它不需要窗口名称可见(l
切换为开启状态)。
星号(`*')显示的交互命令在备用显示模式之外也有用。
=, A, g 始终可用
a, w 与颜色映射和字段管理相同。
6.3 滚动窗口
通常,任务窗口是对系统的全部任务/线程的部分视图,仅显示部分可用字段/列。通过这些滚动键,您可以垂直或水平移动该视图,以显示任何所需的任务或列。
-
Up,PgUp
:滚动任务
将视图向上移动到第一个任务行,直到第一个任务显示在“当前”窗口的顶部为止。向上箭头键移动一行,而PgUp键滚动整个窗口。 -
Down,PgDn
:滚动任务
将视图向下移动到最后一个任务行,直到最后一个任务是唯一显示在“当前”窗口顶部的任务为止。向下箭头键移动一行,而PgDn键滚动整个窗口。 -
Left,Right
:滚动列
逐列水平移动可显示字段的视图。
注意:作为提醒,某些字段/列在可见时并非固定宽度,而是在剩余屏幕宽度上分配。在向右或向左滚动时,该特性可能最初会产生一些意外结果。
此外,对于任何可变宽度字段,当其位置为最后一个显示字段时,有特殊规定。一旦通过右箭头键到达该字段,并且因此是唯一显示的列,您可以在此类字段内继续水平滚动。有关更多信息,请参见下面的`C’交互命令。 -
Home
:跳转到起始位置
将显示重新定位到未滚动的坐标。 -
End
:跳转到结束位置
将显示重新定位,以便最右边的列反映最后一个可显示字段,底部任务行表示最后一个任务。
注意:从这个位置,仍然可以使用箭头键向下和向右滚动。这在只剩下一个列和一个任务作为唯一的显示元素之前都是有效的。 -
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’交互命令进行设置。上述交互命令在全屏模式下始终可用,但如果“当前”窗口的任务显示已关闭,则在备用显示模式下永远不可用。
注意:当任何形式的过滤处于活动状态时,您在滚动时可能会遇到一些轻微的异常,因为并非所有任务都可见。当使用向上/向下箭头键时,这一点尤为明显。
6.4 在窗口中搜索
您可以使用这些交互命令来定位包含特定数值的任务行。
-
L
:定位字符串
您将被提示输入区分大小写的字符串,以从当前窗口坐标开始定位。
对搜索字符串内容没有限制。搜索不仅限于单个字段或列中的值。任务行中显示的所有值都允许出现在搜索字符串中。您可以包括空格、数字、符号,甚至是森林景观艺术。
在没有输入的情况下按<Enter>
将有效地禁用&
键,直到输入新的搜索字符串为止。 -
&
:查找下一个
假设已经建立了一个搜索字符串,top将尝试定位下一个出现的情况。
当找到匹配时,当前窗口将在垂直方向重新定位,使包含该字符串的任务行首先显示。滚动坐标消息可以提供此类垂直重新定位的确认(参见C
交互命令)。然而,通过搜索永远不会改变水平滚动。匹配字符串的可用性将受以下因素影响。
- a. 可显示的字段来自于总可用字段,参见管理字段。
- b. 垂直和/或水平滚动窗口,参见滚动窗口。
- c. 命令/命令行切换的状态,参见`c’交互命令。
- d. 所选排序列的稳定性,例如PID很好,但%CPU不好。
如果搜索失败,恢复当前
窗口到初始位置(未滚动),水平滚动,显示命令行或选择更稳定的排序字段可能会产生成功的&
搜索。上述交互命令在全屏模式下始终可用,但如果“当前”窗口的任务显示已关闭,则在备用显示模式下永远不可用。
注意:每当窗口中有搜索活动时,top将关闭列高亮以防止在内部非显示转义序列上出现误匹配。当窗口的搜索字符串为空时,此类高亮将被恢复。有关排序列高亮的额外信息,请参见`x’交互命令。
6.5 在窗口中进行过滤
您可以使用“其他过滤器”功能来建立选择标准,然后确定在“当前”窗口中显示哪些任务。如果通过“W”交互命令在 rcfile 中保存,这样的过滤器可以被持久化。
建立过滤器需要:1)字段名称;2)运算符;和3)选择数值,至少需要这些。这是top用户输入要求中最复杂的部分,所以当您犯错时,命令回溯会成为您的朋友。在输入提示时,请记住上/下箭头键或它们的别名。
过滤器基础知识
-
- 字段名称区分大小写,拼写与标题中一致
-
- 选择数值不一定需要包含完整显示的字段
-
- 选择可以是不区分大小写,也可以区分大小写
-
- 默认是包含,加上“!”表示排除
-
- 可以对任务窗口应用多个选择标准
-
- 可以同时使用包含和排除标准
-
- 1个相等和2个关系过滤器可以自由混合使用
-
- 每个任务窗口都维护独立的唯一过滤器
如果一个字段未打开或当前未显示,那么您的选择标准将不会影响显示。稍后,如果一个经过过滤的字段变得可见,选择标准将会被应用。
- 每个任务窗口都维护独立的唯一过滤器
键盘摘要
o
:其他过滤器(小写) 您将被提示建立一个在匹配时忽略大小写的过滤器。O
:其他过滤器(大写) 您将被提示建立一个区分大小写的过滤器。^O
:显示活动过滤器(Ctrl键 +o') 这可以作为提醒,显示“当前”窗口中哪些过滤器是活动的。在消息行上将显示一个摘要,直到您按
`键。=
:重置当前窗口中的过滤 这将清除“当前”窗口中的所有选择标准。它还会产生额外的影响,请参见全局命令。+
:重置所有窗口中的过滤 这将清除所有窗口中的选择标准,假设您处于备用显示模式。与“=”交互命令一样,它也会产生额外的后果,因此您可能希望参见窗口命令。
输入要求
当提示输入选择标准时,您提供的数据必须采取以下两种形式之一。有三个必需的信息,第四个是可选的。这些示例使用空格以增加清晰度,但您的输入通常不会这样。
#1#2#3(必需)字段名称?包含值!字段名称?排除值#4(可选)
#1 #2 #3 ( required )
Field-Name ? include-if-value
! Field-Name ? exclude-if-value
#4 ( optional )
项目#1,#3和#4应该是不言自明的。项目#2表示必需的分隔符和运算符,必须是等于号(“=”)或关系运算符(“<”或“>”)之一。“=”等于运算符仅需要部分匹配,这可以减少您的“if-value”输入要求。关系运算符“>”或“<”始终使用字符串比较,即使是数字字段。
它们设计用于与字段的默认对齐方式和同类数据一起使用。当某些字段的数字金额经过缩放而其他字段没有时,数据不再是同类的。如果您建立了一个关系过滤器,并且更改了默认的数字或字符对齐方式,那么该过滤器可能会失败。当将关系过滤器应用于内存字段,并且您没有更改缩放时,它可能会产生误导性的结果。例如,当作为字符串进行比较时,“100.0m”(MiB)将显示大于“1.000g”(GiB)。如果您过滤的结果看起来可疑,只需更改对齐方式或缩放可能就可以实现所需的目标。有关更多信息,请参见“j”,“J”和“e”交互命令。
6.6 潜在问题
这些组过滤器可能产生完全相同的结果,或者第二个可能根本不显示任何东西,只是一个空白的任务窗口。
GROUP=root (仅当相同时产生相同的结果)
GROUP=ROOT (通过小写字母“o”调用)
这两个RES过滤器中的任何一个都可能产生不一致和/或误导性的结果,这取决于当前的内存缩放因子。或者两个过滤器都可能产生完全相同的结果。
RES>9999 (仅当相同时产生相同的结果)
!RES<10000 (内存缩放为“KiB”)
这个nMin过滤器说明了可伸缩字段所特有的问题。这个特定的字段最多可以显示4位数字,超过这个值,值会自动缩放到KiB或更高。因此,虽然存在大于9999的金额,它们将显示为2.6m、197k等。
nMin>9999 (总是一个空白的任务窗口)
6.7 潜在解决方案
这些示例说明了如何创造性地应用其他过滤器来实现几乎任何期望的结果。单引号有时用于界定作为过滤器一部分的空格,或者表示准确的状态请求(^O)。但如果你在现实生活中将它们与if-values一起使用,将找不到任何匹配项。
假设字段nTH已显示,第一个过滤器将导致只显示多线程进程。它还提醒我们,每个显示的字段的末尾空格都是一部分。第二个过滤器用更少的输入实现了完全相同的结果。
!nTH=` 1 ' ( ' 仅用于清晰度)
nTH>1 (同样的结果,输入更少)
在Forest View模式下激活,并且COMMAND列可见时,此过滤器有效地折叠子进程,以便只显示3个级别。
!COMMAND=` `- ' ( ' for clarity only )
最后两个过滤器似乎是对状态请求键(^O)的响应。实际上,每个过滤器都需要单独的输入。PR示例显示了两个并行过滤器,以显示优先级为20或更高的任务,因为有些可能是负数。然后通过利用末尾空格,nMin系列过滤器可以实现上面讨论的失败的“9999”目标。
`PR>20' + `!PR=-' (2个以获得正确结果)
`!nMin=0 ' + `!nMin=1 ' + `!nMin=2 ' + `!nMin=3 ' ...
注意:每当在窗口中激活其他过滤器时,top都会关闭列高亮,以防止在内部非显示转义序列上产生错误匹配。当窗口不再受到过滤器的影响时,此类高亮将被恢复。有关排序列高亮的其他信息,请参见“x”交互命令。
7. 文件
7.1 个人配置文件
通过’W’交互命令创建或更新此文件。
旧版本写为$HOME/.your-name-4-top' +
rc’,前面带有一个句点。
新创建的配置文件写为procps/your-name-4-top’ + `rc’,没有前导句点。procps目录将作为绝对路径设置为 X D G C O N F I G H O M E 或 XDG_CONFIG_HOME或 XDGCONFIGHOME或HOME/.config目录的下级目录。 虽然不打算手动编辑,但这是一般布局:
global # line 1: the program name/alias notation
" # line 2: id,altscr,irixps,delay,curwin
per ea # line a: winname,fieldscur
window # line b: winflags,sortindx,maxtasks,graph modes
" # line c: summclr,msgsclr,headclr,taskclr
global # line 15: additional miscellaneous settings
" # any remaining lines are devoted to optional
" # active 'other filters' discussed in section 5e above
" # plus 'inspect' entries discussed in section 6b below
如果无法建立到rcfile的有效绝对路径,则无法保留对运行中top的自定义修改。
7.2 添加检查项
使用 Y
交互命令,您必须在 top 个人配置文件的末尾添加条目。这些条目只是反映了一个要读取的文件或要执行的命令/管道,其结果将在一个单独的可滚动、可搜索的窗口中显示。
如果您不知道您的 top rcfile 的位置或名称,请使用 W
交互命令来重新编写它并注意这些细节。
检查项可以通过重定向 echo 或编辑配置文件来添加。重定向 echo 会有覆盖 rcfile 的风险,如果它替换(>)而不是追加(>>)到该文件。相反,使用编辑器时必须小心,不要破坏现有的行,其中一些将包含不可打印的数据或异常字符。
以 #
字符开头的检查项将被忽略,无论内容如何。否则,它们由以下 3 个元素组成,每个元素都必须由一个制表符分隔(因此总共有 2 个 `\t’):
.type: 字面上的 `file' 或 `pipe'
.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
除了上面的注释条目之外,下面的示例展示了如何通过回显来实现类似的结果,假设 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’。如果您想要更真实的表示,任何嵌入的制表符都应该被展开。以下示例展示了本来可以是一个 file' 条目,但是却使用了一个
pipe’ 来代替,以便展开嵌入的制表符。
# 下面的条目本来会包含 `\t' ...
# file ^I <your_name> ^I /proc/%d/status
# 但是这将消除嵌入的 `\t' ...
pipe ^I <your_name> ^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
交互命令设计的新创建的脚本。
例如,随着您的检查项数量随着时间的推移而增加,当屏幕宽度超过限制时,Options:
行将被截断。这不会影响操作,只是会使一些选择不可见。但是,如果一些选择由于截断而丢失,但您想要看到更多选项,下面的提示将提供一个简单的解决方案。
Inspection Pause at pid ...
Use: left/right then <Enter> ...
Options: help 1 2 3 4 5 6 7 8 9 10 11 ...
top rcfile 中的条目会为 .name' 元素指定一个数字,而
help’ 条目将标识一个您编写的 shell 脚本,解释这些编号选择实际意味着什么。通过这种方式,可以使更多的选择可见。
7.3 系统配置文件
这个配置文件代表了那些没有保存自己配置文件的用户的默认设置。其格式与个人配置文件完全相同,也可以包括如上所述的 inspect
条目。创建它是一个简单的过程。
-
- 为您的安装适当地配置 top,并使用 `W’ 交互命令保存该配置。
-
- 添加并测试任何所需的 `inspect’ 条目。
-
- 将该配置文件复制到 /etc/ 目录下,命名为 `topdefaultrc’。
7.4 系统限制文件
有这个文件的存在将影响向普通用户显示的帮助屏幕的版本。
更重要的是,它将限制普通用户在 top 运行时被允许做什么。他们将无法执行以下命令。
k 结束一个任务
r 重新安排任务的优先级
d 或 s 更改延迟/睡眠间隔
这个配置文件不是由 top 创建的。相反,它是手动创建的,并放置在 /etc/ 目录下,命名为 `toprc’。
它应该有正好两行,就像这个例子中所示:
s # 第一行:安全模式切换
5.0 # 第二行:延迟间隔(秒)
8 愚蠢的技巧示例
这些技巧中的许多在您给 top 一个调度提升时效果最佳。所以计划使用一个良好的值-10来启动它,假设您有权限。
8.1 内核魔法
对于这些愚蠢的技巧,top 需要全屏模式。
- 用户界面,通过提示和帮助,故意暗示延迟间隔被限制在十分之一秒。然而,您可以自由设置任何所需的延迟。如果您想看到 Linux 在他的调度最佳状态下运行,请尝试将延迟设置为 0.09 秒或更短。
对于这个实验,在 x-windows 下打开一个 xterm 并将其最大化。然后执行以下操作:
通过以下命令为其提供调度提升和微小延迟:
nice -n -10 top -d.09
关闭排序列高亮以尽量减少路径长度
打开反向行高亮以突出显示
尝试不同的排序列(TIME/MEM 效果很好)
并进行正常或反向排序以将最活跃的进程显示出来
您将看到一个非常忙碌的 Linux 正在为您一直以来所做的事情,但没有可用的程序来说明这一点。
-
在使用 `黑底白字’ 颜色的 xterm 下,在 top 的颜色映射屏幕上将任务颜色设置为黑色,并确保任务高亮设置为粗体,而不是反向。然后将延迟间隔设置为大约 0.3 秒。
在将最活跃的进程显示出来后,您将看到当前正在运行的任务的幽灵般的图像。 -
删除现有的 rcfile,或创建一个新的符号链接。启动这个新版本,然后输入
T'(一个秘密键,参见主题 4c. 任务区命令,排序),然后输入
W’ 和 `q’。最后,使用 -d0(零延迟)重新启动程序。
您的显示将以前一个 top 的三倍速率进行刷新,获得 300% 的速度优势。当 top 爬上 TIME 梯子时,请尽可能耐心地推测 top 是否会达到榜首。
8.2 弹跳窗口
这些愚蠢的技巧需要 top 使用交替显示模式。
显示 3 或 4 个任务显示器,选择除最后一个之外的任何窗口,并使用 i
命令切换将空闲进程关闭。根据您应用 i
的位置,有时会有几个任务显示器在跳动,有时则像手风琴一样,因为 top 尽力分配空间。
将每个窗口的摘要行设置为不同的方式:一个没有内存(m
);另一个没有状态(t
);也许一个什么都没有,只有消息行。然后按住 a
或 w
,观察弹跳窗口的变化 - 跳跃窗口。
显示所有 4 个窗口,并依次使用 i
命令切换将空闲进程关闭。您刚刚进入了“极端弹跳”区域。
8.3 大鸟窗口
这个愚蠢的把戏也需要交替显示模式。
显示所有 4 个窗口,并确保 1:Def 是“当前”窗口。然后,使用交互命令 n
不断增加窗口大小,直到所有其他任务显示都“被挤出窝”。
当它们都被挤开后,使用 _
命令切换在所有可见/不可见窗口之间。然后思考一下:top 是在说谎,还是在诚实地告诉你强加给他的真相?
8.4 老掉牙的小把戏
这个愚蠢的技巧最好在没有交替显示模式的情况下使用,因为对齐是基于每个窗口的。
启动 top 并将 COMMAND 设置为最后(最右侧)显示的列。如果需要,使用 c
命令切换来显示命令行,并确保使用 V
命令切换激活了森林视图模式。
然后使用上/下箭头键将显示定位到一些截断的命令行(最后位置为 +
)。您可能需要调整 xterm 的大小以产生截断。
最后,使用 j
命令切换使 COMMAND 列右对齐。
现在使用右箭头键到达 COMMAND 列。继续使用右箭头键,密切观察显示的命令行的移动方向。
一些行向左移动,而其他一些向右移动
最终所有行都会发生切换,并向右移动