macOS系统中发送SIGABRT信号无法生成core dump问题咨询
问题原因分析
- 系统完整性保护(SIP)的限制:macOS自带的
sleep是系统预装的签名受保护二进制程序,Apple的SIP机制默认禁止对这类系统二进制生成core dump,哪怕你已经配置了ulimit -c unlimited和/cores目录777权限,该限制依然会生效。而你自行编写的测试程序属于用户级不受SIP保护的二进制,因此触发SIGSEGV时可以正常生成core dump。 - 信号处理流程的内核逻辑差异:Linux内核默认没有针对系统预装二进制的core dump额外限制,只要配置了core dump参数,任何进程收到默认行为是生成core的信号(包括SIGABRT、SIGSEGV等)都会生成core文件。但macOS内核在处理信号的core dump生成逻辑时,会额外校验目标二进制的签名、权限标记,系统级受保护二进制收到SIGABRT时会直接跳过core生成步骤,仅终止进程。
补充验证方案:你可以自行编写一个简单的C程序,采用SIGABRT的默认信号处理逻辑,编译后运行再发送
kill -6信号,即可正常生成core dump,进一步验证是系统自带程序的保护限制导致该问题。
若确实需要对系统二进制生成core dump,需要在恢复模式下关闭SIP的调试限制,但该操作会降低系统安全性,不建议日常使用时开启。
内容的提问来源于stack exchange,提问作者Lixin Wei
相关产品推荐
相关产品推荐

