log show 命令不直接记录信号发送行为,但可通过追踪进程终止、launchd 重启、内核退出等信号触发的可观测后果来间接分析;常用命令包括按“exited due to signal”、launchd 异常码(如143)、kernel 退出事件等条件筛选日志。
log show 命令本身不直接记录或暴露“信号事件”(如 sigterm、sigkill)的原始信号发送行为,因为 macos 的 unified logging 系统默认不将进程间发送的 unix 信号本身作为日志条目写入。但系统在响应某些关键信号(尤其是导致进程终止、崩溃或守护进程重启的信号)时,会生成关联的结构化日志条目——这些才是你能实际追踪到的“信号事件痕迹”。
要有效追踪与信号相关的系统级行为,关键是识别并查询那些由信号触发的可观测后果,例如进程异常退出、内核强制终止、launchd 重启服务、崩溃报告生成等。
? 查看因信号导致的进程终止日志
当一个进程被 kill -9(SIGKILL)或 kill -15(SIGTERM)终止时,若该进程未捕获信号或处理失败,系统常通过 launchd、kernel 或 reportp 记录上下文:
log show --predicate 'eventMessage contains "exited due to signal" OR eventMessage contains "killed by signal" OR eventMessage contains "terminated with signal"' --last 24h
常见匹配消息包括:
Exited due to signal: Segmentation faultKilled by signal: TerminatedTerminated due to signal 9
✅ 提示:
signal 9=SIGKILL,signal 15=SIGTERM,signal 11=SIGSEGV
? 追踪 launchd 对服务的信号干预(最常用)
launchd 是 macOS 的核心进程管理器,它会在服务异常退出后尝试重启,并记录完整决策链。这类日志明确包含信号动作:
log show --predicate 'subsystem == "com.apple.xpc.launchd" AND (eventMessage contains "signal" OR eventMessage contains "exit" OR eventMessage contains "abnormal")' --last 1h
典型条目示例:
Sender: com.apple.xpc.launchd Message: Service exited with abnormal code: 143 → launchd will restart it.
(code 143 表示进程收到 SIGTERM 后退出)
你还可以聚焦具体服务:
部署和使用军舰的 macOS Automator 自动化服务集合。包含 5 个实用工作流:PDF转JPG、PNG重命名并转JPG、图像拼接、解压RAR、顺序命名图像文件。一键安装所有服务到 ~/Library/Services/ 目录。使用场景:(1) "安装我的自动化服务",(2) "部署所有 Automato...
log show --predicate 'subsystem == "com.apple.xpc.launchd" AND eventMessage contains "com.apple.dhcpclient"' --last 7d
⚙️ 检查内核级信号相关事件(需 root 权限,更底层)
部分信号响应(如 SIGSTOP/SIGCONT 触发的调度变更、SIGKILL 强制回收内存)可能出现在 kernel 日志中:
log show --predicate 'process == "kernel" AND eventMessage contains "signal"' --last 1h --info --debug
⚠️ 注意:内核日志中直接含 “signal” 字样的条目较少,更多表现为:
-
proc_exit、task_terminate、thread_terminate -
zombie进程清理记录 -
vm_map_remove(内存强制释放,常伴随SIGKILL)
可组合搜索增强命中率:
log show --predicate 'process == "kernel" AND (eventMessage contains "exit" OR eventMessage contains "terminate" OR eventMessage contains "zombie")' --last 30m
? 导出与分析建议
-
将结果导出为文本便于逐行检查:
log show --predicate 'eventMessage contains "signal" OR eventMessage contains "exited due to"' --last 7d > ~/Desktop/signal-events.txt
-
结合时间戳和 PID 定位源头:
log show --start "2026-07-06 14:22:00" --end "2026-07-06 14:25:00" | grep -i -E "(signal|exit|kill|terminate)"
-
若怀疑是某个进程被外部 kill,反查其启动/父进程线索:
log show --predicate 'eventMessage contains "MyApp" AND eventMessage contains "started"' --last 1h
不复杂但容易忽略:macOS 不记录“谁发了信号”,只记录“谁收到了信号并因此做了什么”。所以真正有效的信号追踪,是从终止结果倒推行为链,而非寻找 kill -15 pid 这类命令本身的日志——后者通常只存在于用户 shell history 或 audit 日志(需额外开启)。

















