返回

文章详情

对 Linux 中 htop/top 上所有可见内容的解释

Hacker News2026年7月4日 12:00

很长一段时间我不知道 htop 中所有内容的含义。我以为在我的双核机器上,负载平均值 1.0 意味着 CPU 使用率为 50%。这并不完全正确。此外,为什么它会显示 1.0?我决定查找所有内容并在这里记录下来。他们还说,学习某件事的最佳方式是尝试教别人。目录 htop 在 Ubuntu Server 16.04 x64 中 运行时间 负载平均值 进程 进程 ID / PID 进程树 进程用户 进程状态 R - 运行中或可运行(在运行队列中) S - 可中断睡眠(等待事件完成) D - 不可中断睡眠(通常为 IO) Z - 已终止但未被其父进程回收的僵尸("zombie")进程 T - 被作业控制信号停止 t - 在调试期间被调试器停止 进程时间 进程亲和性和优先级 内存使用 - VIRT/RES/SHR/MEM VIRT/VSZ - 虚拟内存 RES/RSS - 常驻大小 SHR - 共享内存大小 MEM% - 内存使用 进程 /sbin/init /lib/systemd/systemd-journald /sbin/lvmetad -f /lib/systemd/udevd /lib/systemd/timesyncd /usr/sbin/atd -f /usr/lib/snapd/snapd /usr/bin/dbus-daemon /lib/systemd/systemd-logind /usr/sbin/cron -f /usr/sbin/rsyslogd -n /usr/sbin/acpid /usr/bin/lxcfs /var/lib/lxcfs/ /usr/lib/accountservice/accounts-daemon /sbin/mdadm /usr/lib/policykit-1/polkitd --no-debug /usr/sbin/sshd -D /sbin/iscsid /sbin/agetty --noclear tty1 linux sshd: root@pts/0 & -bash & htop 附录 源代码 文件描述符和重定向 PuTTY 中的颜色 C 中的 Shell TODO 更新 最后的备注 T恤 htop 在 Ubuntu Server 16.04 x64 中 这是我将要描述的 htop 截图。 运行时间 运行时间显示系统已运行多长时间。你可以通过运行 uptime 来查看相同的信息: $ uptime 12 : 17 : 58 up 111 days, 31 min, 1 user, load average: 0.00 , 0.01 , 0.05 uptime 程序是如何知道的?它从 /proc/uptime 文件中读取信息。 9592411.58 9566042.33 第一个数字是系统启动的总秒数。第二个数字是机器在空闲状态下的时间(秒)这个第二个值可能会大于总体系统的运行时间,因为它是一个总和。这是我怎么知道的?我查看了 uptime 程序在运行时打开了哪些文件。我们可以使用 strace 工具来查看。 strace uptime 会有很多输出。我们可以 grep 来查找打开的系统调用。但这实际上行不通,因为 strace 的所有输出都发送到标准错误(stderr)流。我们可以用 2>&1 将 stderr 重定向到标准输出(stdout)流。我们的输出是: $ strace uptime 2 >& 1 | grep open ... open( "/proc/uptime" , O_RDONLY) = 3 open( "/var/run/utmp" , O_RDONLY|O_CLOEXEC) = 4 open( "/proc/loadavg" , O_RDONLY) = 4 其中包含我提到的文件 /proc/uptime。事实证明,你也可以使用 strace -e open uptime,而不必使用 grep。那么,如果我们可以直接读取文件内容,为什么还需要 uptime 程序呢?因为 uptime 的输出是经过人类友好格式化的,而秒数更适合用于您自己的程序或脚本中。 负载平均值 除了运行时间,还有三个数字表示负载平均值。 $ uptime 12 : 59 : 09 up 32 min, 1 user, load average: 0.00 , 0.01 , 0.03 它们来自 /proc/loadavg 文件。再看看 strace 输出,你会看到该文件也已被打开。 $ cat /proc/loadavg 0.00 0.01 0.03 1 / 120 1500 前三列代表过去 1、5 和 15 分钟的平均系统负载。第四列显示当前正在运行的进程的数量和处理的总数量。最后一列显示最后一个使用的进程 ID。我们先从最后一个数字开始。每当您启动一个新进程时,它会被分配一个 ID 号。进程 ID 通常是递增的,除非它们已经用尽并被重新使用。进程 ID 为 1 的进程是 /sbin/init,它在启动时启动。我们再看一遍 /proc/loadavg 的内容,然后在后台启动 sleep 命令。当在后台启动时,它的进程 ID 会被显示出来。 $ cat /proc/loadavg 0.00 0.01 0.03 1 / 123 1566 $ sleep 10 & [ 1 ] 1567 所以 1/123 意味着此时有一个进程正在运行或准备运行,并且总共有 123 个进程。当您运行 htop 并看到仅有一个运行中的进程时,这意味着它是 htop 进程本身。如果您运行 sleep 30 并再次运行 htop,您会注意到仍然只有一个运行中的进程。这是因为 sleep 并没有在运行,它在睡眠或空闲,换句话说,它在等待某件事情发生。运行中的进程是当前正在物理 CPU 上运行或等待其运行的进程。如果您运行 cat /dev/urandom > /dev/null,它会不断生成随机字节并写入一个从不读取的特殊文件,您会看到现在有两个运行中的进程。 $ cat /dev/urandom > /dev/null

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡