信号处理程序后信号无法生成核心转储

Posted

技术标签:

【中文标题】信号处理程序后信号无法生成核心转储【英文标题】:Signal can't generate core dump after signal Handler 【发布时间】:2011-07-25 14:40:33 【问题描述】:

我从某人那里听说,如果信号在信号处理程序中被捕获,它不会生成核心转储 - 或无用的核心转储。

正确吗?为什么?

在 Linux 上工作。

【问题讨论】:

【参考方案1】:

核心转储通常由其默认处理程序响应某些信号而生成。如果您修改该处理程序,您将修改响应,因此不会获得核心转储。

默认情况下,核心转储是为了响应因故障而发生的信号(SIGSEGV(访问未映射的内存)、SIGILL(无效指令)、SIGBUS(各种其他不正确的系统访问))和使用的 SIGABRT 信号当程序本身检测到致命错误时(在标准运行时,来自断言或通过调用abort())。它也是一些其他信号的默认值。特别是 SIGUSR1,除非它准备好处理它并更改处理程序,否则程序不应该接收它。完整列表见man 7 signal

请注意,“默认处理程序”不是应用程序中的代码。这是一个特殊的值,向内核表明它应该代表应用程序采取一些特定的行动。这个动作是退出一些信号,退出核心转储一些其他的,其余的什么都不做。

【讨论】:

以上是关于信号处理程序后信号无法生成核心转储的主要内容,如果未能解决你的问题,请参考以下文章

如何获取已向已退出转储核心的另一个进程发送 SIGABRT 信号的进程的 pid

发射信号会导致核心转储

Core dump文件和ECFS

什么组件实际上转储核心?

杀死进程而不创建核心转储?

collect2:错误:ld 以信号 11 [分段错误] 终止,核心转储