活动监视器不能直接标出“死机进程”,但可通过cpu长期为0%、状态为sleeping/idle、响应性显示“无响应”、启动时间久等组合特征识别假死进程;再结合磁盘/网络活动停滞、取样堆栈高频出现recvfrom/connect/poll等系统调用,或终端lsof/log show命令验证,精准定位因网络超时、权限拒绝等导致的僵死进程。

macOS 活动监视器不能直接标出“死机进程”,但能帮你快速定位导致系统卡顿、无响应或资源僵死的异常进程。关键不是等它彻底崩溃,而是捕捉那些“活着却不干活”“占着资源不释放”的可疑行为。
看 CPU 和状态组合:找“零负载却未响应”的进程
切换到“CPU”标签页,点击“% CPU”列排序,重点关注以下特征同时出现的进程:
- CPU 占用长期为 0.0% 或低于 0.5%
- “状态”列为 sleeping 或 idle(不是 running)
- “响应性”显示 无响应(macOS Sequoia 新增字段,右键列标题可启用)
- “启动时间”很早,已运行数小时以上
这类进程表面安静,实则可能卡在系统调用里——比如等待网络回复、权限校验失败后反复重试、或陷入不可中断睡眠(D 状态),是典型假死信号。
查磁盘与网络活动:验证是否真“停摆”
分别切换到“磁盘”和“网络”标签页,对可疑进程交叉观察:
- 在“磁盘”页中,“磁盘读取”和“磁盘写入”均为 0 B,但“状态”为无响应 → 可能因权限拒绝(如 EACCES)无法访问路径,连失败重试都未触发真实 I/O
- 在“网络”页中,“接收/发送数据/秒”长期为 0 B/s,但“收到的数据”总量明显(如 ≥1 MB),且“CPU”为 0 → 很可能卡在 connect()、recvfrom() 等阻塞调用上,连接未建立或服务端失联
真正健康的空闲进程,通常伴随低能耗+低 CPU 时间增长;而假死进程往往“能耗偏高 + CPU 时间停滞”,说明它在内核态持续等待,而非真正休眠。
用“取样进程”确认卡点位置
选中可疑进程 → 顶部菜单栏选择 文件 > 取样进程(或右键 → “取样”),等待 2–3 秒生成报告:
- 若堆栈中高频出现 recvfrom、connect、poll、kevent、select,且停留在
libsystem_kernel.dylib或libnetwork.dylib内部 → 基本锁定为网络超时卡死 - 若频繁看到 mach_msg_trap、__psynch_cvwait、pthread_cond_wait → 更可能是线程被锁、信号量或同步原语阻塞,需检查应用自身逻辑或依赖服务状态
取样结果比实时数值更可靠,它反映的是进程实际执行路径,而非表层资源读数。
配合终端快速缩小范围
活动监视器提供线索,终端命令负责验证。打开终端,运行以下命令辅助判断:
-
lsof -iTCP -sTCP:SYN_SENT,ESTABLISHED | grep -v "127.0.0.1"→ 查是否有大量半开连接(SYN_SENT)或长时间 ESTABLISHED 但无流量 -
log show --predicate 'subsystem == "com.apple.sandboxd" AND eventMessage CONTAINS "deny"' --last 10m→ 查最近 10 分钟沙盒权限拒绝日志,确认是否因磁盘权限卡住 -
ps aux | grep -E 'Z|defunct'→ 验证是否真有僵尸进程(正常 macOS 几乎不会输出)
不要依赖第三方“清理工具”。macOS 的 launchd 会毫秒级回收退出进程,所谓“隐藏僵尸”多是界面刷新延迟。真正该关的,是那些不显眼却持续耗电、卡在系统调用里的后台代理或 updater 进程。











