风铃草 中文站
早期探索 2026.06 — 2026.08 · 19 个测试 / 360 次采样

btop-gui

不经过黑盒

绕开通用系统信息库、直接解析 Linux /proc 的桌面资源监视器;底层采集与边界测试由本人独立主导,前端界面由 AI 辅助快速构建。

  • Go
  • Wails
  • Vue
  • ECharts
  • procfs
/proc/net/tcp

local_address

0100007F:1F90
地址 · 字节反转
127.0.0.1
端口 · 转十进制
8080
按内核字段格式展示一条回环监听地址的解码过程。

缘起

我很喜欢在终端里挂着 btop,但看久了总会好奇面板上跳动的数字到底是怎么从内核里算出来的。于是干脆绕开现成的跨平台系统信息库,直接从 Linux 的 /proc 开始手写采集层:自己读原始文本、自己转单位、自己兜底脏数据。

做这个项目的目的很单纯,就是想亲手把系统监控的黑盒拆开走一遍:面板上每显示一个指标,底下的采集代码都得能一行行指回内核里的原始字段。

解码

比如 /proc/net/tcp 里的网络地址,内核直接按小端序的十六进制写了出来。下面这行数据取自本机的回环监听,要想把它还原成人类能读的 IP 和端口,得先把前四个字节按序反转,再把冒号后面的端口号按大端序转成十进制。

/proc/net/tcp 原始字段节选
  sl  local_address rem_address   st
   0: 0100007F:1F90 00000000:0000 0A
   1: 00000000:0050 00000000:0000 0A
0100007F127.0.0.1按字节反转
1F9080800x1F90 = 8080
0ALISTENTCP 状态码
inode/proc/[pid]/fd映射回进程
真实字段格式的示意,非界面截图。inode 到进程的映射需要遍历 /proc/[pid]/fd,而不是只看 socket 表。 FIG. 01

解析 /proc/meminfo 也是同样的路数:不同内核版本下字段可能缺失、格式可能异常、单位换算时如果直接往 uint64 里塞,遇到边界输入就会算出一串离谱的天文数字。因此把溢出保护和缺省兜底写进采集层,是从第一天就定下的规矩。

证据

19个测试函数
360次真实采样
4种负载场景

仓库里留存了四种不同负载场景下的 360 次真实采样快照,配套写了 19 个测试函数,专门用来盯住底层的文本解析与异常边界。

项目的 /proc 采集层与测试由我本人独立主导完成;外层的前端图表界面则借助 AI 快速搭起来。哪部分是自己啃下来的、哪部分借了工具的力,在文档里都留了明确的记录。

边界

项目属于早期探索,离完整的桌面系统监视器还有不少距离:

  • 采集层仅针对 Linux procfs 编写,没有做 macOS 或 Windows 的原生系统调用适配。
  • 前端界面目前只做到了数据能看,交互细节与图表体验还没有仔细打磨。
  • 不打算替代成熟的终端监控工具,也没有去做极限性能压测。
  • 核心收获全在底层采集的可解释性上:至少现在看监控面板时,我知道每个数字背后经历了什么。