不知何故,看起来WCOREDUMP(status)
始终告诉我已创建core
文件。
我fork()
当我收到SIGCHLD
信号时,我使用waitpid(...&status...);
。
然后,当我使用WIFSIGNALED(status)
时,我会看到WTERMSIG(status)
(代码11)的预期分段错误,当我调用WCOREDUMP(status)
时我也会得到真的。
但是,默认情况下,Ubuntu设置为不生成核心转储文件。为什么WCOREDUMP()
仍然返回true? (除非core
文件保存在除当前目录之外的其他地方?)
答案 0 :(得分:1)
我发现核心转储文件是由内核生成并发送到apport应用程序的。该信息位于man 5 core
,其中有一个部分:
将核心转储管道添加到程序
此程序在/proc/sys/kernel/core_pattern
中定义,在大多数Ubuntu系统中,如下所示:
|/usr/share/apport/apport %p %s %c %P
这意味着将核心转储数据传输到应用程序apport,而apport又可以决定将数据发送到文件
因此,就内核而言,核心转储已生成,因此WCOREDUMP()
返回true是明智的。