每位 macOS 开发者都会遇到同样的困境:活动监视器告诉你某个进程正在吃掉大量 CPU,却几乎无法提供任何有用的信息来帮你找到根源。本文从基础到进阶,全面介绍 macOS 进程监控的方方面面。
什么是进程?
在 macOS 中,每个正在运行的程序都是一个进程,拥有唯一的进程 ID(PID)。当你打开浏览器,macOS 会启动一个父进程,而该父进程又可能启动数十个子进程——渲染进程、GPU 进程、扩展进程等。理解这种层级关系,是高效监控的第一步。
基础工具:活动监视器
Apple 内置的活动监视器(/Applications/Utilities/Activity Monitor.app)提供:
- 每个进程的实时 CPU 和内存占用
- 基础的网络和磁盘 I/O 统计
- 强制退出失控应用的能力
日常使用尚可。但对于开发者而言,它的局限几乎立刻就会显现。
活动监视器的短板
作为开发者,你很快就会碰到这些问题:
没有进程树视图。 活动监视器只展示一个扁平列表。当一个 shell 脚本派生出五个子进程、这些子进程又各自产生后代时,你看到的只是一团乱麻,根本无法分辨谁启动了谁。
无法查看环境变量。 当你需要调试为什么 NODE_ENV 或 DYLD_LIBRARY_PATH 在某个进程内部设置错误时,根本没有办法检查该进程实际的启动环境。
没有实时正则搜索。 从 300 个进程中按名称过滤需要反复输入,而且经常自动重置。
短命进程完全不可见。 构建系统在毫秒之间启动并销毁编译器进程?活动监视器根本来不及捕捉。
命令行方案
ps、top、lsof 和 dtrace 可以弥补部分不足:
# 显示进程树
ps auxf
# 列出某进程的所有打开文件
lsof -p <PID>
# 查看某进程的环境变量
ps eww -p <PID>
这些工具虽然强大,但使用起来相当繁琐。ps eww 的输出是一堵难以阅读的文字墙;lsof 的结果可能长达数千行。
更好的选择:ProcXray
ProcXray 是一款专为开发者打造的原生 macOS 应用,旨在提供活动监视器所缺失的深度数据。
进程树视图
在扁平列表与实时进程树之间一键切换,立即呈现父子关系——对于调试 shell 脚本、构建工具或 Chrome、Electron 等多进程应用至关重要。
环境变量检查器
点击任意进程,切换到环境变量选项卡。进程启动时的每一个环境变量都清晰列出,支持搜索,并可一键复制为 JSON 格式。从此告别 ps eww 的痛苦解析。
实时正则搜索
输入正则表达式,列表立即在进程名称、PID、命令行参数和路径等维度同步过滤。定位 node.*server 或 python3.*manage,毫秒之间。
短命进程捕获
ProcXray 以绿色高亮新生进程,并在可配置的时间窗口内保留已退出的进程(以红色标记)。那些在活动监视器刷新之前就消失的短暂编译器和链接器进程,终于无所遁形。
代码签名验证
安全审计时,ProcXray 直观展示每个进程的签名状态、签名身份以及 Entitlements 列表——无需面对晦涩的 codesign -dvvv 输出。
工具选择参考
| 场景 | 推荐工具 |
|---|---|
| 快速查看 CPU/内存 | 活动监视器 |
| 调试失控进程 | ProcXray |
| 检查进程环境变量 | ProcXray |
| 追溯进程父子关系 | ProcXray |
| 发现未签名可疑进程 | ProcXray |
| 自动化脚本监控 | ps、top、dtrace |
立即开始
免费下载 ProcXray — 已代码签名并经 Apple 公证。需要 macOS 14 (Sonoma) 或更高版本,支持 Apple Silicon 与 Intel。
安装后,ProcXray 将取代你日常使用活动监视器的习惯,带来真正让你提速的监控体验。