> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/man/man1/top.1.md).

# top.1

`top` — 显示并更新顶层 CPU 进程的信息

## 名称

`top`

## 概要

`top [-abCHIijnPqSTtuvwz] [-d count] [-J jail] [-m cpu | io] [-o field] [-p pid] [-s time] [-U username] [number]`

## 描述

`top` 显示系统中排名靠前的进程，并周期性更新此信息。如果标准输出是智能终端（见下文），默认显示终端屏幕上能容纳的尽可能多的进程。否则，显示较多进程（约 20 个）。使用原始 CPU 百分比对进程排序。如果指定了 `number`，则显示前 `number` 个进程，而非默认数量。

`top` 区分支持高级功能与不支持高级功能的终端。这种区分会影响某些选项默认值的选择。本文档余下部分中，“智能”终端指支持光标寻址、清屏以及清除到行尾的终端。反之，“哑”终端指不支持这些功能的终端。如果 `top` 的输出被重定向到文件，其行为如同在哑终端上运行。

选项如下：

**`-a`** 显示从 argv\[] 向量派生的命令名，而非真实可执行文件名。当你想要监视将状态信息放入其中的应用程序时，此选项很有用。如果真实名称与 argv\[0] 不同，将以括号显示。命令行中的不可打印字符以 C 风格反斜杠序列或三位八进制序列编码。

**`-b`** 使用“batch”（批处理）模式。此模式下，来自终端的所有输入都被忽略。中断字符（如 `^C` 和 `^\`）仍然有效。此为哑终端或输出非终端时的默认模式。

**`-C`** 切换 CPU 显示模式。默认情况下，top 在 WCPU 列中显示加权 CPU 百分比（与 [ps(1)](/man/man1/ps.1.md) 显示为 CPU 的值相同）。每次传递 `-C` 标志时，在“raw cpu”（原始 CPU）模式与“weighted cpu”（加权 CPU）模式之间切换，分别显示“CPU”列或“WCPU”列。

**`-d`** `count` 仅显示 `count` 次后退出。一次显示被视为屏幕的一次更新。哑终端的默认值为 1。注意，当 `count` = 1 时，无法获取 CPU 在每种状态下所花费时间的百分比信息。

**`-H`** 对多线程进程，单独显示每个线程。默认情况下，每个进程显示一行摘要。

**`-I`** 不显示空闲进程。默认情况下，top 同时显示活动进程和空闲进程。

**`-i`** 使用“interactive”（交互）模式。此模式下，任何输入都会立即被读取处理。关于各键执行何种功能，参见“交互模式”一节的说明。命令处理完成后，屏幕会立即更新，即使命令未被理解也是如此。当标准输出为智能终端时，此模式为默认模式。

**`-J`** `jail` 仅显示属于 `jail` 的进程。可以是 jail 的 `jid` 或 `name`。使用 0 限定为主机进程。使用此选项隐含 `-j`。

**`-j`** 显示 [jail(8)](/man/man8/jail.8.md) ID。

**`-m`** `mode` 以指定 `mode` 显示统计信息。可用模式为 `cpu` 和 `io`。默认为 `cpu`。

**`-n`** 使用“non-interactive”（非交互）模式。等同于“batch”模式。

**`-o`** `field` 按指定字段对进程显示区域排序。字段名为输出中显示的列名，但使用小写：“cpu”、“size”、“res”、“time”、“pri”、“threads”、“total”、“read”、“write”、“fault”、“vcsw”、“ivcsw”、“jid”、“swap”或“pid”。

**`-P`** 显示每个 CPU 的 CPU 使用统计。

**`-p`** `pid` 仅显示进程 `pid`。

**`-q`** 将 `top` 的 nice 值重设为 -20，使其运行更快。当系统非常迟缓时，可用于提高发现问题的可能性。此选项仅能由 root 使用。

**`-S`** 在显示中显示系统进程。通常，pager 和 swapper 等系统进程不予显示。此选项使其可见。

**`-s`** `time` 将屏幕更新间隔设为 `time` 秒，可以为小数。默认更新间隔为 2 秒。

**`-T`** 切换显示线程 ID（tid）而非进程 ID（pid）。

**`-t`** 不显示 `top` 进程自身。

**`-U`** `username` 仅显示属于 `username` 的进程。此选项目前仅接受用户名，不理解 uid 数字。

**`-u`** 不将 uid 数字映射为用户名。通常，`top` 会读取 **/etc/passwd** 文件中所需的部分，将其遇到的所有用户 ID 数字映射为登录名。此选项禁用上述行为，同时可能减少执行时间。显示 uid 数字而非用户名。

**`-v`** 将版本号信息写入 stderr 后立即退出。

**`-w`** 显示每个进程的大致 swap 使用量。

**`-z`** 不显示系统空闲进程。

`count` 和 `number` 字段均可指定为“infinite”（无限），表示可以尽可能延伸。通过使用关键字“infinity”、“maximum”或“all”的任意适当前缀实现。布尔标志为开关型。第二次指定这些选项中的任何一个都会否定第一次的设置。

## 交互模式

当 `top` 运行于“交互模式”时，它从终端读取命令并据此执行。此模式下，终端被置于“CBREAK”模式，使得字符在键入后立即处理。通常，按键发生在 `top` 两次显示之间，即在等待 `time` 秒流逝时。此时，命令将被处理，显示随后立即更新（反映命令可能指定的任何更改）。即使命令不正确也会如此。如果在 `top` 更新显示期间按键，它会完成更新后再处理命令。某些命令需要额外信息，会相应提示用户。输入此类信息时，用户的 erase 和 kill 键（由 stty(1) 命令设置）会被识别，换行符终止输入。

按键绑定如下：

**`space`** 更新显示。

**`/`** 按命令名过滤。提示输入 `string` 或 `+` 以显示所有进程。

**`a`** 切换进程标题的显示。

**`C`** 切换显示原始或加权 CPU 百分比。

**`d`** 更改退出前剩余显示次数。提示输入新数值。

**`e`** 显示上一条命令生成的系统错误列表（如果有）。

**`H`** 切换线程的显示。

**`h`** 或 **`?`** 显示命令摘要（帮助屏幕）和版本信息。

**`i`** 或 **`I`** 切换空闲进程的显示。

**`J`** 按特定 jail 过滤进程。提示输入 jail 名或 `+` 以显示属于所有 jail 和主机的全部进程。同时启用 JID 显示。

**`j`** 切换 [jail(8)](/man/man8/jail.8.md) ID 的显示。

**`k`** 向进程列表发送信号（默认为 SIGKILL）。此操作类似于 [kill(1)](/man/man1/kill.1.md) 命令。

**`m`** 在“cpu”和“io”模式之间切换显示。

**`n`** 或 **`#`** 更改显示的进程数量。提示输入新数值。

**`o`** 更改显示的排序顺序。排序键名包括“cpu”、“res”、“size”和“time”。默认为 cpu。

**`P`** 切换每个 CPU 统计的显示。

**`p`** 按精确进程 ID 过滤。提示输入 `PID` 或 `+` 以显示所有进程。

**`q`** 退出 `top`。

**`r`** 更改进程列表的优先级（即“nice”值）。此操作类似于 [renice(8)](/man/man8/renice.8.md)。

**`S`** 切换系统进程的显示。

**`s`** 更改两次显示之间的延迟秒数。提示输入新数值。

**`T`** 在线程 ID 和进程 ID 之间切换显示。

**`t`** 切换 `top` 进程的显示。

**`u`** 按精确进程所有者用户名过滤。提示输入 `username` 或 `-`/`+` 以显示所有用户。通过在用户名前加 `+` 和 `-` 可分别向集合添加或从中移除用户名。

**`w`** 切换 swap 使用量的显示。

**`z`** 切换系统空闲进程的显示。

## 显示内容

显示顶部几行展示系统状态的概要信息，包括分配给进程的最后一个进程 ID（在大多数系统上）、三个负载平均值、当前时间、现有进程数量、每种状态（睡眠、运行、启动、僵尸和停止）的进程数量，以及每种处理器状态（用户、nice、系统和空闲）所花费时间的百分比。还包括物理和虚拟内存分配信息。

屏幕其余部分显示各进程的信息。此显示类似于 [ps(1)](/man/man1/ps.1.md)，但不完全相同。PID 为进程 ID；JID（显示时）为对应进程的 [jail(8)](/man/man8/jail.8.md) ID；USERNAME 为进程所有者的名称（如果指定了 `-u`，UID 列将替代 USERNAME）；THR 为线程计数，显示进程拥有的线程数；PRI 为进程的当前优先级；NICE 为 [nice(1)](/man/man1/nice.1.md) 值；SIZE 为进程的总大小（文本、数据和栈）；RES 为当前驻留内存量；SWAP 为启用时的大致 swap 量（SIZE、RES 和 SWAP 以千字节为单位）；STATE 为当前状态（“START”、“RUN”（在 SMP 系统上显示为“CPUn”）、“SLEEP”、“STOP”、“ZOMB”、“WAIT”、“LOCK”之一，或进程所等待的事件）；C 为进程正在其上执行的处理器编号（仅在 SMP 系统上可见）；TIME 为进程已使用的系统和用户 CPU 秒数；WCPU（显示时）为加权 CPU 百分比（与 [ps(1)](/man/man1/ps.1.md) 显示为 CPU 的值相同）；CPU 为原始百分比，是用于排序确定进程顺序的字段；COMMAND 为进程当前运行的命令名（如果进程被换出，此列标记为“”）。

如果进程处于“SLEEP”或“LOCK”状态，状态列将报告进程所等待的事件或锁的名称。锁名以星号 **`*`** 为前缀，而睡眠事件则不加前缀。

## 内存说明

```sh
Mem: 61M Active, 86M Inact, 368K Laundry, 22G Wired, 102G Free
ARC: 15G Total, 9303M MFU, 6155M MRU, 1464K Anon, 98M Header, 35M Other
     15G Compressed, 27G Uncompressed, 1.75:1 Ratio, 174M Overhead
Swap: 4096M Total, 532M Free, 13% Inuse, 80K In, 104K Out
```

### 物理内存统计

**Active** 活动字节数

**Inact** 非活动干净字节数

**Laundry** 排队等待清洗的脏字节数

**Wired** 固定字节数，包括 IO 级缓存的文件数据页

**Buf** 用于 IO 级磁盘缓存的字节数

**Free** 空闲字节数

### ZFS ARC 统计

这些统计仅在 ARC 使用时显示。

**Total** 用于 ZFS ARC 的固定字节数

**MRU** 持有最近使用数据的 ARC 字节数

**MFU** 持有最频繁使用数据的 ARC 字节数

**Anon** 持有传输中数据的 ARC 字节数

**Header** 持有头部的 ARC 字节数

**Other** 杂项 ARC 字节

**Compressed** ARC 缓存使用的内存字节数

**Uncompressed** 压缩前存储在 ARC 缓存中的数据字节数

**Ratio** ARC 中缓存数据的压缩比

### 交换空间统计

**Total** 总可用 swap 使用量

**Free** 总空闲 swap 使用量

**Inuse** swap 使用量

**In** 从 swap 设备换入的字节数（上一间隔）

**Out** 换出到 swap 设备的字节数（上一间隔）

## 环境变量

**`TOP`** `top` 的默认参数集。

**`LC_CTYPE`** 指定 `-a` 标志时显示 `argv` 向量所使用的区域设置。

## 参见

[kill(1)](/man/man1/kill.1.md), [ps(1)](/man/man1/ps.1.md), stty(1), getrusage(2), humanize\_number(3), [mem(4)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man4/mem.4.md), [renice(8)](/man/man8/renice.8.md)

## 历史

`top` 首次出现于 FreeBSD 2.2.2。

## 作者

William LeFebvre, EECS Department, Northwestern University

## 缺陷

被换出进程的命令名应能追踪，但这会使程序运行更慢。

与 [ps(1)](/man/man1/ps.1.md) 一样，`top` 在为更新收集信息时情况可能发生变化。它给出的画面只是对现实的近似。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://book.bsdcn.org/man/man1/top.1.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
