htop 面向 AI 代理与贡献者的工程指南:构建命令、代码风格、C 语言架构与 AI 贡献规范
可观测性指标监控【免费下载链接】htophtop - an interactive process viewer项目地址https://gitcode.com/gh_mirrors/ht/htop点击查看免费下载htop 仓库根目录下的 AGENTS.md 是一份专为 AI 编码代理coding agent编写的工程指引浓缩了构建 htop 的命令、源自 docs/styleguide.md 的代码风格约定、以虚函数表vtable实现的面向对象 C 架构以及仓库的 AI 贡献披露政策。阅读本文后你将掌握 htop 的完整构建流程与关键 configure 开关、可直接套用的 C 编码规范、从入口 htop.c 到主循环 ScreenManager.c 的调用链原理以及提交 AI 辅助代码时Assisted-by:与Signed-off-by:提交尾注trailer的正确用法。一、构建 htopautogen、configure 与关键开关AGENTS.md 给出的标准构建路径分三档# 为本机构建 htop 二进制 ./autogen.sh ./configure make # 启用 Performance Co-PilotPCP支持构建 pcp-htop 二进制 ./autogen.sh ./configure --enable-pcp make # 代码修改后的增量重建无需再次运行 autogen makeautogen.sh的作用是由autoconf体系重新生成configure脚本只有在修改了 configure.ac 或 Makefile.am 之后才需要重新执行日常开发中修改 C 源码后直接make即可。仓库同时提供htop.c本地系统后端与pcp-htop.cPCP 后端两个程序入口这与 AGENTS.md 中“文件名命名唯一例外是htop.c和pcp-htop.c”的规则相呼应。关键 configure 开关AGENTS.md 列出的六个开关均可在 configure.ac 中找到对应的AC_ARG_ENABLE定义其行为如下开关默认值作用--enable-pcp关闭enable_pcpno启用 PCP PMAPI 支持构建pcp-htop二进制--enable-capabilities自动探测check链接 Linux libcapcap_init与sys/capability.h用于提升进程权限等操作--enable-delayacct自动探测check启用 Linux delay accounting提供进程调度延迟数据--enable-sensors自动探测check链接 lm-sensorssensors_init与sensors/sensors.h读取硬件传感器数据--enable-unicode开启enable_unicodeyes允许使用 Unicode 界面字符依赖终端/ncurses 能力--enable-debug关闭enable_debugno生成调试构建从 configure.ac 的结构看多数开关支持yes/no/check三态取值非法取值会直接触发AC_MSG_ERROR报错退出configure结束时会打印一份配置摘要delay accounting、sensors、capabilities、unicode、debug 等方便确认本次构建能力。PCP 是可选后端关闭时构建出读取本机内核数据的htop启用后pcp-htop通过 PMAPI 拉取指标能力取决于 PCP 环境。二、代码风格规范3 空格缩进、CamelCase 与包含顺序AGENTS.md 的“Code Style”一节是 docs/styleguide.md 的浓缩版贡献者包括 AI 代理必须遵守以下约定。命名约定缩进3 个空格永远不使用 Tab文件名CamelCase如Process.c、CPUMeter.h目录一律小写linux/、zfs/唯一例外是入口文件htop.c与pcp-htop.c函数名模块名_函数名()前缀通常与模块名一致例如Process_compare()XUtils.h的内存与字符串工具函数是前缀规则的例外变量名短而精确——循环计数器用i而非someCounterValueForThisSimpleLoop模块私有全局变量必须声明为static只有极少数确需跨模块共享的变量才在头文件中extern声明。文件内容结构与头文件守卫源文件的组织遵循一套松散模板版权声明 → 头文件包含 → 数据结构与前向声明 →static私有函数实现 → 对外可见函数实现 → 对外可见的常量结构伪面向对象定义。头文件的 include guard 有一个历史惯例#ifndef/#define守卫位于版权注释之前例如 docs/styleguide.md 给出的示例#ifndef HEADER_FILENAME #define HEADER_FILENAME /* htop - Filename.h (C) 2021 htop dev team Released under the GNU GPLv2, see the COPYING file in the source distribution for its full text. */头文件包含顺序五组组间空行分隔#include config.h // IWYU pragma: keep—— 当模块需要 automake/autoconf 的全局配置或 C 库特性宏如__GNU_SOURCE时必选本模块配套头文件仅.c文件头文件中省略系统头文件非条件包含程序头文件条件包含的头文件系统头在前。每组内部按字母序排序且子目录路径排在父级文件之后因此unistd.h排在sys/time.h之前。一个容易踩坑的规则只要.c文件使用XUtils.h无论是自身还是被包含的头文件间接使用就必须在该.c文件顶部按上述方式包含config.h。XUtils.h内部设有完整性检查缺失会直接导致编译错误或者引发更难排查的编译问题config.h的包含只出现在.c文件中绝不放入头文件。内存、字符串与控制流内存分配一律使用xMalloc()、xCalloc()、xRealloc()失败即退出数组场景用xReallocArray()/xReallocArrayZero()分配 0 字节是错误应显式使用NULL并相应处理字符串优先使用XUtils.h中String_*系列函数如String_eq()、String_cat()替代裸strcmp/strcat例如!strcmp(foo, foo)应写作String_eq(foo, foo)导出控制非公共 API 的函数一律标记static公共 API 必须在配套头文件中有声明避免函数式宏参数重求值、语法逃逸、弱类型都是其缺点大括号简单单语句return、break、continue、goto、平凡赋值可省略大括号控制流主体严禁与条件写在同一行同一 if/else 链中只要一个分支用了大括号所有分支都必须使用。换行与空行超长表达式的续行比首行再多一级缩进if (very_long_condition another_very_complex_expression something_else_to_check) { // Code follows as normal ... } else { }函数内用单个空行分隔相关语句组帮助梳理方法流程。styleguide 还给出了一条 astyle 基线命令可作为自动格式化起点astyle -r -xb -s3 -p -xg -c -k1 -W1 -H \*.c \*.h系统 API 的兼容性要求代码必须能在任意 C99 编译器上编译。使用新平台特性如 Linux 的fstatat时应提供 POSIX 回退方案例如用fstat模拟无法提供回退时应当优雅降级并在界面上向用户明确提示该功能不可用。htop 的generic/目录如 generic/Compat.c 所在的平台无关工具集正是承载这类跨平台兜底代码的位置。三、架构以虚函数表实现的面向对象 CAGENTS.md 指出 htop 是 C99 编写的跨平台交互式进程查看器核心设计是“面向对象 C 模式 虚函数表”。这一说法可以直接在 Object.h 中得到印证typedef void(*Object_Display)(const Object*, RichString*); typedef int(*Object_Compare)(const void*, const void*); typedef void(*Object_Delete)(Object*); typedef struct ObjectClass_ { const void* const extends; const Object_Display display; const Object_Delete delete; const Object_Compare compare; } ObjectClass; struct Object_ { const ObjectClass* klass; };每个对象内部持有一个klass指针指向ObjectClass即虚函数表display、delete、compare三个函数指针构成“虚方法”。头文件还提供了便捷的宏封装Object_getClass()、Object_delete()、Object_display()、Object_compare()通过断言保证函数指针非空后再调用AllocThis(class_)宏则是伪对象创建的惯用法——分配内存并立刻Object_setClass(this, Class(class_))其中Class(class_)展开为Class_ ## _class这样的类描述符常量。Object_isA()则基于extends字段实现“is-a”类型判断相当于 C 版的类型继承链查询。类层次AGENTS.md 描述的三条继承链对应仓库中的具体文件Object→Row→Process每行表格数据的基类链进程数据在 Process.c、Row.c 中实现Object→Panel带事件处理与滚动能力的 UI 部件见 Panel.cObject→Meter支持文本/条形/图形三种显示模式的系统指标见 Meter.c。平台抽象层每个平台目录提供四件套由Machine基类统一调度平台目录提供的文件linux/、darwin/、freebsd/、netbsd/、openbsd/、dragonflybsd/、solaris/、pcp/、unsupported/Platform.c/.h—— 平台初始化/收尾、load average、时钟等同上PlatformMachine.c/.h—— 系统状态CPU 数量、内存、运行时长同上PlatformProcessTable.c/.h—— 从操作系统枚举进程同上PlatformProcess.c/.h—— 平台特有的进程字段以 Linux 为例linux/LinuxMachine.c、linux/LinuxProcessTable.c、linux/LinuxProcess.c 与 linux/Platform.c 共同构成 Linux 后端linux/ProcessField.h 则定义该平台可用的进程列字段。unsupported/目录为未适配平台提供空实现兜底保证编译链完整。pcp/平台比较特殊它通过 PCP 的 PMAPI 获取指标并支持用配置文件动态定义列、Meter 与屏幕——pcp/columns/如tcp、gpu_memory、pcp/meters/如entropy、mysql、pcp/screens/如biosnoop、opensnoop中的每个文件都是一个可被 PCPDynamicColumn.c、PCPDynamicMeter.c、PCPDynamicScreen.c 加载解析的定义。主循环从源码结构看调用链为htop.c或pcp-htop.c→CommandLine_run()→ScreenManager_run()。htop.c 的main函数只有两行核心逻辑int main(int argc, char** argv) { return CommandLine_run(argc, argv); }ScreenManager.c 中的ScreenManager_run()L241 起是主循环所在其骨架如下计时重算checkRecalculation()基于时间阈值触发重新采集——拉取进程数据、刷新 Meter按需重绘当redraw或force_redraw为真时调用ScreenManager_drawPanels()并支持iterationsRemaining控制有限刷新次数后退出读取键盘输入Panel_getCh(panelFocus)获取按键或鼠标事件经FunctionBar_synthesizeEvent()合成为功能键事件分发动作处理器按键交给 Action 层返回Htop_Reaction标志位REFRESH、RECALCULATE、QUIT 等。Htop_Reaction是位标志枚举定义在 Action.htypedef enum { HTOP_OK 0x00, HTOP_REFRESH 0x01, HTOP_RECALCULATE 0x02 | HTOP_REFRESH, HTOP_SAVE_SETTINGS 0x04, HTOP_KEEP_FOLLOWING 0x08, HTOP_QUIT 0x10, HTOP_REDRAW_BAR 0x20, HTOP_UPDATE_PANELHDR 0x40 | HTOP_REFRESH, HTOP_RESIZE 0x80 | HTOP_REFRESH | HTOP_REDRAW_BAR | HTOP_UPDATE_PANELHDR, } Htop_Reaction;所有键盘动作函数都遵循统一签名Htop_Reaction (*Htop_Action)(State* st)见 Action.h其中State结构聚合了Machine*、主面板、Header 与各种开关状态。这种“动作返回位标志、主循环集中响应”的设计使按键处理与界面刷新解耦。核心子系统一览文件职责Action.c键盘动作处理器每个返回Htop_ReactionSettings.c配置持久化~/.config/htop/htoprcHeader.c顶部区域的 Meter 布局FunctionBar.c底部 F1–F10 功能键标签CRT.cncurses 抽象层颜色、属性、输入Vector.c / Hashtable.c通用容器XUtils.c内存包装器与字符串工具使用它的.c必须包含config.hRichString.c带属性/颜色的字符串缓冲区generic/可跨多个平台共享的例程如 generic/uname.c、generic/gettime.c四、AI 贡献政策Assisted-by 与 Signed-off-by 的分工AGENTS.md 最后定义了仓库对 AI 辅助贡献的规则完整版见 docs/ai-contributions-policy.mdv1.02026-02-18其要点可归纳为四条允许使用贡献者 MAY 使用 AI 辅助开发但必须遵守政策责任Accountability贡献者 MUST 为自己的贡献承担全部责任——无论代码来自人类还是 LLM都代表对质量、许可证合规与实用性的背书贡献者永远是作者对贡献整体完全负责透明Transparency当贡献的显著部分未经修改地取自 AI 工具时MUST 披露 AI 使用其他有益场景 SHOULD 披露。例行使用工具纠正语法拼写、润色语言则无需披露。git 场景下的推荐做法是Assisted-by:提交尾注例如Assisted-by: generic LLM chatbot Assisted-by: ChatGPTv5非 git 场景文档前言、设计文件元数据、issue 留言也可用Assisted-by:行披露评审评估AI 可辅助人类评审者做分析与建议但 MUST NOT 作为实质性或主观判断的唯一/最终仲裁者CI/CD、自动化测试、垃圾过滤等客观技术校验不受此限。接受的最终责任始终落在授权该操作的人类贡献者身上。AGENTS.md 在此基础上补充了两条操作细节提交应使用Signed-off-by:尾注git commit -s认证开发者原创证书Developer Certificate of Origin的承诺签名与披露是两回事Assisted-by:记录的是“用了什么工具”Signed-off-by:记录的是“人类为内容负责”AI 代理不得未经贡献者确认就代替其签署Signed-off-by:。这一套规则对 AI 编码代理的落地含义很明确你可以修改代码、生成补丁但必须如实留下Assisted-by:尾注且把Signed-off-by:的签署决定权留给人。五、小结这份 AGENTS.md 如何指导一次典型贡献把全文串起来AI 代理或人类贡献者在 htop 仓库完成一次改动的标准流程是用./autogen.sh ./configure make搭好构建按需追加--enable-pcp、--enable-sensors等开关改动时遵守 3 空格缩进、CamelCase 文件与函数命名、五组包含顺序、static导出控制和xMalloc/String_*工具集涉及平台行为时按平台四件套Platform、Machine、ProcessTable、Process定位涉及交互时理解ScreenManager_run主循环与Htop_Reaction标志机制提交时以Signed-off-by:署名并在实质使用 AI 时追加Assisted-by:尾注。AGENTS.md 的价值正在于把这些分散在 docs/styleguide.md、docs/ai-contributions-policy.md 与源码结构中的约定压缩成一份可被机器直接执行的工程契约。赞分享可观测性指标监控【免费下载链接】htophtop - an interactive process viewer项目地址https://gitcode.com/gh_mirrors/ht/htop点击查看免费下载相关推荐华为CANN算子库Pad接口Pad 产品支持情况 ! npu950 id1 term Ascend 950PR/Ascend 950DT/term 不支持 ! end id深度学习人工智能机器学习分布式训练Vim 仓库开发协作指南面向 AI Coding Agent 与贡献者的贡献规范、构建测试与代码风格全解析Vim 仓库开发协作指南面向 AI Coding Agent 与贡献者的贡献规范、构建测试与代码风格全解析 本文以 Vim 官方仓库根目录的 AGENTS.m开发工具代码编辑器Larastarters 插件开发指南如何为 Laravel 项目添加自定义功能模块Larastarters 插件开发指南如何为 Laravel 项目添加自定义功能模块 Larastarters 是一款强大的 Laravel 项目启动工具它上一篇2025年最强漫画下载神器一键解决8大下载痛点下一篇formSelects终极指南Layui生态下的高效多选解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

agent-skills实战:从工具调用到技能库,构建稳定可用的AI Agent

agent-skills实战:从工具调用到技能库,构建稳定可用的AI Agent

"agent-skills"这个词,我第一次看到的时候,第一反应是又一个把Function Calling包装成新概念的东西。但真正在一个中型项目里把它落地之后,我才意识到自己之前的理解有多浅。这个项目表面上是给Agent加一层"技能库"&…

2026/9/25 8:11:29 阅读更多 →
Zepp Life步数接口鉴权与源码实现:从签名到风控的完整拆解

Zepp Life步数接口鉴权与源码实现:从签名到风控的完整拆解

1. 从"步数焦虑"说起:为什么有人要动接口的脑筋每天深夜十一点半,朋友圈里总有几个头像准时冒出来,步数从早上的三位数突然跳到两万五。你要是真信了他们"今天去爬山了",那说明你还没搞明白这个圈子的玩法。步…

2026/9/25 8:11:28 阅读更多 →
CTF逆向入门:从IDA静态分析到base64算法识别与Python脚本还原

CTF逆向入门:从IDA静态分析到base64算法识别与Python脚本还原

做 CTF 逆向最怕的不是题目难,而是拿到一个陌生文件之后不知道从哪下手。BUUCTF 上的 reverse3 算是很多人的第一道“有点意思”的逆向题,它不像单纯的签到题那样直接给 flag,也没有壳、没有混淆、没有反调试,就是一道规规矩矩的 …

2026/9/25 8:11:26 阅读更多 →

最新新闻

取代Navicat!40+种数据库,这款数据库管理工具配 TaoToken 统一 Key 通道

取代Navicat!40+种数据库,这款数据库管理工具配 TaoToken 统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 13:32:52 阅读更多 →
第二章 工具的界限就是 Agent 世界的界限:用 TaoToken 统一 Key 打通 Cline 工具边界

第二章 工具的界限就是 Agent 世界的界限:用 TaoToken 统一 Key 打通 Cline 工具边界

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 13:32:52 阅读更多 →
Sybase ASA 12.0 解压即用客户端实战指南

Sybase ASA 12.0 解压即用客户端实战指南

简介:本资源是Sybase Adaptive Server Anywhere(ASA)12.0官方客户端工具的绿色免安装版本,专为数据库开发、运维及DBA人员设计,用于连接、管理与调试ASA/SAP SQL Anywhere数据库系统。解压即用,内置JRE运行…

2026/9/25 13:32:52 阅读更多 →
家庭财务管理系统源码从拆包到部署实战与常见排错指南

家庭财务管理系统源码从拆包到部署实战与常见排错指南

简介:一套面向家庭收支管理场景的ASP.NET WebForms源码包,适合软件专业学生、毕业设计者以及需要构建个人记账工具的开发者。压缩包共200个文件,主要文件包括C#业务逻辑文件(.cs)、ASP.NET页面(.aspx)、GIF图标素材(.gif)、运行依赖库(.dll)及…

2026/9/25 13:32:52 阅读更多 →
Codex vs DeepSeek Harness:两种Agent架构路线,谁才是未来?TaoToken统一Key接入实测

Codex vs DeepSeek Harness:两种Agent架构路线,谁才是未来?TaoToken统一Key接入实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 13:32:52 阅读更多 →
Atlas 300V 24G推理卡部署YOLOv5全流程实战指南

Atlas 300V 24G推理卡部署YOLOv5全流程实战指南

最近后台连续收到好几条差不多的提问:Atlas 300V 24G是不是运算加速卡啊,能不能拿来部署YOLO?问的人多了,我就知道这不是个例,而是大家在采购清单、项目验收文件、二手平台里看到“Atlas 300V 24G”这个型号之后的普遍…

2026/9/25 13:31:51 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →