
Mac 发烫这事,我以前一直归咎于天气、归咎于 Chrome,最多再骂两句 Xcode。直到今天刷到一张截图,才意识到还有一种可能:电脑在给别人打工,偷偷挖矿。看完我也顺手把自己的 Mac 翻了一遍,下面就是我的排查顺序。
先说那张截图
10 月 19 日北京时间 13:04,X 上的 @kimmonismus 发了一条帖子,配图是一个 Reddit 帖子的截图,标题大意是「Claude 在帮我写温度监控 App 的时候,抓到了我 Mac 上的挖矿程序」。
据截图,Claude 在核对传感器读数时发现 xmrig 占用了大约 1175% 的 CPU,相当于 12 个核心左右被吃满,CPU 温度最高到了 112°C。截图里还写了:挖矿程序从 /tmp/rigupdater 运行,矿池是 pool.hashvault.sh;持久化靠的是 ~/Library/LaunchAgents 里一个名字乱码的 plist,用 bash 跑一段编码过的脚本,还开了 KeepAlive,日期比这人开始写 App 早得多。Claude 说它还没动手删任何东西,这点我挺认同,先别乱动。
但我得把丑话说在前面:这些数字全部来自截图。所谓的 Reddit 原帖我没找到,机器型号、时间线都没法核实,大家当个「正在流传的案例」看就好,别当成实测结论。
类似的事其实不止这一起。V2EX 上 9 月有位用户发帖说自己中了挖矿木马,按他的自述,是之前开过的 opencode server(Web 端)没设 OPENCODE_SERVER_PASSWORD,又通过 frp 暴露在外,被人远程连进来换掉了程序,最后跑起了 xmrig。我没法独立验证他的分析,但思路很值得参考:问题未必出在「下载了什么奇怪软件」,也可能是你自己开着、早就忘了的某个服务。
这也是我觉得最有意思的地方。AI 编程代理在你电脑上到处跑命令,能帮你发现木马;同样是它,也可能某天顺手 npm install 了一个有毒的包。
先别慌,大多数 Mac 发烫跟木马无关
苹果自己的风扇说明里就写了,迁移数据之后 Spotlight 建索引,风扇转得快是正常的。Mac 发烫的日常原因,我自己碰到过的还有这些:
- 刚升级系统或者刚用迁移助理搬完家,「聚焦」和「照片」在后台索引,等一两天再说。
- 浏览器开了一堆标签页,其中某个视频网站或者网页游戏一直在跑。
- 外接显示器。尤其是一些老款 Intel MacBook Pro,内屏加外屏同时开,热得很明显。
- Apple 芯片的 Mac 上跑只支持 Intel 的 App,要经过 Rosetta 转译。活动监视器里「种类」一栏会显示「Intel」,哪个 App 吃资源吃得不对劲,可以先看看是不是它。苹果的说明在这里。
- 夏天抱着笔记本窝在床上、被子上。苹果明确说过别这么用。
真正因为挖矿导致的 Mac 发烫,特征其实很直白:某个进程长期吃满好几个核心,你什么都不干的时候它也不停。矿工是不休息的。

第一步:Mac 发烫时,先打开活动监视器看 CPU
- 打开「活动监视器」(应用程序 > 实用工具),点上方的「CPU」。
- 点「% CPU」这一列的列标题,让占用最高的排在最上面。苹果的官方说明里有排序和「显示」菜单的用法,选「所有进程」。
- 注意这个百分比是按单核算的。100% 就是一个核心满载,所以看到 800%、1000% 以上,意思是好几个核心同时被吃满。
- 选中可疑进程,按 Command-I 或者点信息按钮,在「打开的文件和端口」里能看到程序到底放在哪。路径在
/tmp、某个以点开头的隐藏文件夹,或者名字是一串乱码的,都要警惕。 - 顺便看一眼「能耗」标签。苹果把能耗影响定义为一个相对值,越低越好;笔记本上还有「12 小时耗电量」一栏,能看出谁一整天都在忙。
有两个名字经常把人吓到,其实是冤枉的。kernel_task 占用高,多半是系统觉得 CPU 太热了,在主动限制它。苹果的说法是 kernel_task 是在应对发热,不是发热的原因。所以看到它忙,应该去找「谁在制造热量」,而不是想办法干掉它。WindowServer 负责把所有窗口画到屏幕上,窗口多、动画多、接了高分辨率外接屏的时候忙一点,正常。
不正常的是:xmrig,名字里带 rig、miner、xmr 的进程,或者一个你完全不认识的进程在 Mac 空闲时还挂着几百的百分比。挖矿程序也经常改名伪装成系统进程,所以别光看名字,路径和「一直满载」这个模式更说明问题。

习惯用终端的话
下面几行是我自己常用的,直接粘贴就行:
# 按 CPU 占用排前 10(第 3 列是 %CPU)
ps aux | sort -nrk 3 | head -n 10
# 看某个进程的完整命令和路径
ps -p PID -o pid,%cpu,command
# 当前用户加载的非苹果 launchd 任务
launchctl list | grep -v com.apple
# 现在有哪些进程连着外网
lsof -i -nP | grep ESTABLISHED
把 PID 换成第一条命令里看到的进程号。截图里那个挖矿程序连的是矿池,如果同一个进程还一直连着一个陌生地址,基本可以坐实了。
第二步:看看开机自启了什么
挖矿程序要赚钱,就得关不掉、重启后还能回来,所以几乎都会做持久化。先走苹果官方的路子:苹果菜单 > 系统设置 > 通用 > 登录项与扩展。「登录时打开」里不认识的删掉;下面的后台项目(新版文档叫「App 后台活动」,Ventura 那几代叫「允许在后台」)也挨个看一遍,说不清来历的就关掉。
如果开机就不对劲,苹果的排查文档建议登录时按住 Shift 跳过登录项,或者先全部移除、重启,再一个个加回来。笨办法,但管用。
进阶:自己翻 LaunchAgents 和 LaunchDaemons
先说清楚:苹果并没有建议普通用户去翻这几个文件夹,这一步算进阶操作,对终端不熟的话可以跳过。原则就一条:只看你不认识的 .plist,系统自带的东西别删。
要看的是这三个位置:
ls -la ~/Library/LaunchAgents
ls -la /Library/LaunchAgents
ls -la /Library/LaunchDaemons
# 不用打开编辑器,直接看内容
plutil -p ~/Library/LaunchAgents/com.example.something.plist

大部分条目都来自你装过的软件,比如 Google、Zoom、Adobe、VPN、网盘客户端。可疑的长得跟截图里那个差不多:名字是一串随机字母,ProgramArguments 指向 /tmp 或隐藏目录,bash -c 后面跟一大段 base64,KeepAlive 设成 true。想了解这些字段是干嘛的,可以看苹果旧版开发者文档里关于 launch agent 和 daemon 的章节。
怎么清理,才不会越弄越糟
顺序很重要:先停掉负责「拉起」它的东西,再杀进程。不然你这边刚 kill 掉,launchd 两秒后又给你启动一个。
- 动手前先把 plist 路径和程序路径记下来,截个图,后面要用。
- 卸载任务。用户级的:
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/名字.plist;在 /Library/LaunchDaemons 里的:sudo launchctl bootout system /Library/LaunchDaemons/名字.plist。 - 杀掉还在跑的进程:
kill PID,或者在活动监视器里点「退出进程」。 - 把 plist 和程序本体先挪到桌面上一个「隔离」文件夹,别急着直接删。确认没问题再删。
- 跑一下
crontab -l,看有没有不是你写的定时任务;再扫一眼~/.zshrc、~/.zprofile,有没有下载或启动东西的奇怪语句。 - 重启,等十分钟,再开活动监视器看看。如果又回来了,说明还有别的东西在拉它。
还有一步很多人会忘。木马以你的身份运行,你能读到的它都能读到。截图里提到那台 Mac 上的 GitHub 登录也暴露了。所以请换一台干净的设备:改密码、退出所有已登录的会话,把这台机器上用过的 API Key、SSH 密钥、各种 token 全部换掉。
什么时候别折腾了,直接重装
如果发现了窃密程序,或者挖矿程序删了又回来、Mac 发烫反反复复,或者你就是心里不踏实,那就备份好文件,抹掉后重新安装 macOS。文件手动拷回来,别用迁移助理整机恢复,不然很可能把问题一起搬回来。损失一个晚上,换个安心,我觉得值。
macOS 自己也不是毫无防备。系统内置了 XProtect,基于特征码检测,苹果会独立于系统更新自动推送规则(默认每天检查一次),能拦截和清除已知恶意软件。但它靠特征码,一个刚编译出来、从 shell 脚本拉起的矿机不一定认得出。想再确认一遍,可以用 Malwarebytes for Mac 的免费扫描。用一个靠谱的就够了,网上那些「Mac 清理大师」之类的,本身就挺让人头疼。
如果你在用 Claude Code、Codex 这类代理
我自己天天用,也天天让它们在我电脑上跑命令。说出来才发现,这其实是挺大的信任。插件也一样,我之前整理过自己真会装的 Claude Code Mods,每一个都是以你的权限在跑的代码。几个我现在会注意的点:
- 认真看它装了什么。代理跑
npm install、pip install、brew install的时候,扫一眼包名有没有拼错,没听过的包去搜一下。拼写相近的「李鬼包」是最老的套路了。 - 把沙箱打开。Claude Code 有内置的 Bash 沙箱,macOS 上用的是系统的 Seatbelt,输入
/sandbox就能开始配置。Codex 也有read-only、workspace-write这些沙箱模式,Auto 预设下需要联网的命令会先问你。 - 代理的 Web 端、远程服务别裸奔。上面 V2EX 那个案例就是教训:开了就记得设密码,不用了就关掉。
- 跑完一个长任务,顺手
ls -lt ~/Library/LaunchAgents看看有没有多出新东西。五秒钟的事。
如果你每天都在高强度用这些代理,可以顺便看看我维护的 Claude / Codex 限额与封号追踪。用量突然暴涨又说不清原因,和 CPU 突然暴涨一样,值得多看一眼。
这件事好玩的地方在于,是 AI 抓到了矿机;不好玩的地方在于,AI 装上一个矿机也一样容易。两件事都是真的。AI 站在安全事件两边也不是头一回了,之前那个攻击银行、还让 AI 帮忙写简历的人就是例子。所以多留个心眼,看看它们干完活留下了什么。
当然,如果查到最后,Mac 发烫只是因为聚焦在建索引,那是最好的结果。