我从某人那里听说,如果在信号处理程序中捕获到信号,它将不会生成核心转储 - 或者无用的核心转储。
是对的,为什么?
使用linux。
答案 0 :(得分:0)
核心转储通常是由默认处理程序响应某些信号而生成的。如果修改该处理程序,则修改响应,因此不会获得核心转储。
默认情况下生成核心转储以响应因故障而发生的信号(SIGSEGV(访问未映射的内存),SIGILL(无效指令),SIGBUS(各种其他不正确的系统访问))和使用的SIGABRT信号当程序本身检测到致命错误时(在标准运行时,从断言或通过调用abort()
)。它也是其他一些信号的默认值。特别是SIGUSR1,程序不应该接收,除非它准备处理它并更改处理程序。有关完整列表,请参阅man 7 signal
。
请注意,“默认处理程序”不是应用程序中的代码。它是一个特殊值,表明内核应该代表应用程序采取一些特定的操作。对于某些信号,此操作是退出,对于其他信号退出核心转储,对其余信号不执行任何操作。