WeWorkBuddy

[分享创造] 做了个菜单栏小工具:找出是哪个进程把 Mac 烤热的,把它挪到能效核继续跑

跑多 agent 的时候遇到一个很烦的问题:Mac 烫到 70℃,风扇全速,但打开活动监视器根本看不出是谁干的。 十几行一模一样的 node ,CPU 百分比还在跳,一行行对下去二十分钟没了。而且很多时候元凶是某个跑了两小时的 agent ,你也不想直接 kill ——中断了上下文就丢。 所以写了个菜单栏 App ,叫 Manatee ,就做两件事:找出谁在烫,把它挪到能效核。 怎么找出「谁」 难点是同一个 agent 会 fork 出一堆同名进程,按可执行名分组没有意义。所以按 rootPid 聚合成会话,一个会话一行,CPU 百分比是整棵进程树求和。 另一个坑是判定。编译的时候瞬时 800% 是正常的,不能算异常。所以记录每个会话最近 6 分钟的采样, 连续 5 分钟超过 200%(两个核) 才标记出来。实测这个窗口能把编译抖动和「真的卡住了」区分开。 相关代码在 SessionHistory.swift : /// 记录每个会话最近 6 分钟的 CPU 采样,用来判断「连续满载」。 /// 只看瞬时值会把编译时的短暂 800% 当成异常,所以必须带时间窗。 private let

阅读原始来源
原始网页截图: [分享创造] 做了个菜单栏小工具:找出是哪个进程把 Mac 烤热的,把它挪到能效核继续跑
原始网页截图 · www.v2ex.com

来源记录

研究分析

变化记录

来源描述:跑多 agent 的时候遇到一个很烦的问题:Mac 烫到 70℃,风扇全速,但打开活动监视器根本看不出是谁干的。 十几行一模一样的 node ,CPU 百分比还在跳,一行行对下去二十分钟没了。而且很多时候元凶是某个跑了两小时的 agent ,你也不想直接 kill ——中断了上下文就丢。 所以写了个菜单栏 App ,叫 Manatee ,就做两件事:找出谁在烫,把它挪到能效核。 怎么找出「谁」 难点是同一个 agent 会 fork 出一堆同名进程,按可执行名分组没有意义。所以按 rootPid 聚合成会话,一个会话一行,CPU 百分比是整棵进程树求和。 另一个坑是判定。编译的时候瞬时 800% 是正常的,不能算异常。所以记录每个会话最近 6 分钟的采样, 连续 5 分钟超过 200%(两个核) 才标记出来。实测这个窗口能把编译抖动和「真的卡住了」区分开。 相关代码在 SessionHistory.swift : /// 记录每个会话最近 6 分钟的 CPU 采样,用来判断「连续满载」。 /// 只看瞬时值会把编译时的短暂 800% 当成异常,所以必须带时间窗。 private let

版本与成本证据

可供比较的近期同类记录:“Show HN: We Gave AI Coding Agents Production Memory” (Show HN, 2026年11月9日);“Show HN: A doc server where Claude or local agent edits based on added comments” (Show HN, 2026年11月9日)。主题相近仅用于导航,未核验其是否属于同一需求或独立证据。

适用与受影响对象

先明确变化影响的现有工作流,再判断是否升级。发布热度不证明效果提升;接口、价格或可用性变化也可能增加迁移工作。

缺失的比较信息

待补齐:新旧行为、受影响套餐与地区、生效时间、兼容性、回退路径及同一工作量下的成本。

采用与迁移验证

保存发布或政策原文,对新旧方案运行同一个任务并比较结果与完整账单;若涉及停服,先核验截止时间再安排迁移。