信号处理程序后信号无法生成核心转储
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
。
请注意,“默认处理程序”不是应用程序中的代码。这是一个特殊的值,向内核表明它应该代表应用程序采取一些特定的行动。这个动作是退出一些信号,退出核心转储一些其他的,其余的什么都不做。
【讨论】:
以上是关于信号处理程序后信号无法生成核心转储的主要内容,如果未能解决你的问题,请参考以下文章