每位 macOS 开发者都会遇到同样的困境:活动监视器告诉你某个进程正在吃掉大量 CPU,却几乎无法提供任何有用的信息来帮你找到根源。本文从基础到进阶,全面介绍 macOS 进程监控的方方面面。
快速结论
活动监视器支持 CPU、内存查看和父子进程分层显示。ProcXray 将进程树与环境变量、正则搜索、代码签名检查及已退出进程的保留记录整合在同一工具中,方便进一步排查。
什么是进程?
在 macOS 中,每个正在运行的程序都是一个进程,拥有唯一的进程 ID(PID)。当你打开浏览器,macOS 会启动一个父进程,而该父进程又可能启动数十个子进程——渲染进程、GPU 进程、扩展进程等。理解这种层级关系,是高效监控的第一步。
活动监视器可以显示父子进程关系:选择 显示 → 所有进程,分层显示(英文界面为 View → All Processes, Hierarchically)。这能帮助你追踪哪个进程启动了辅助进程。参见 Apple 的进程查看说明。
基础工具:活动监视器
Apple 内置的活动监视器(/Applications/Utilities/Activity Monitor.app)提供:
- 每个进程的实时 CPU 和内存占用
- 基础的网络和磁盘 I/O 统计
- 强制退出失控应用的能力
日常使用尚可。但对于开发者而言,它的局限几乎立刻就会显现。
活动监视器的短板
作为开发者,你很快就会碰到这些问题:
无法查看环境变量。 当你需要调试为什么 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 将取代你日常使用活动监视器的习惯,带来真正让你提速的监控体验。
常见问题(FAQ)
最快定位“是谁启动了这个可疑进程”的方法是什么?
使用实时进程树。父子关系可以立刻指向具体的脚本、构建步骤或应用组件。
在 macOS 上如何查看某个进程的环境变量?
终端可用 ps eww -p <PID>,但在变量很多、需要反复排障时,图形化检查通常更快、更稳定。
开发者是否应完全放弃活动监视器?
活动监视器支持 CPU、内存查看和父子进程分层显示。ProcXray 将进程树与环境变量、正则搜索、代码签名检查及已退出进程的保留记录整合在同一工具中,方便进一步排查。
参考资料
- Apple: 活动监视器使用手册
ps命令文档top命令文档lsof命令文档dtrace命令文档