不知怎么的,似乎WCOREDUMP(status)总是告诉我创建了一个core文件。
当我收到fork()信号时,我使用SIGCHLD
然后,当我使用waitpid(...&status...);时,我看到了WIFSIGNALED(status)的预期分段错误(代码11),而且不知怎的,当我调用WTERMSIG(status)时,我也得到了正确的结果。
但是,默认情况下,Ubuntu设置为不生成核心转储文件。为什么WCOREDUMP(status)仍然返回true?(除非WCOREDUMP()文件保存在当前目录之外的其他位置?)

最佳答案

我发现核心转储文件由内核生成并发送到apport应用程序。信息可在man 5 core中找到,其中有一个部分:
将堆芯转储到程序
这个程序在/proc/sys/kernel/core_pattern中定义,在大多数Ubuntu系统上,如下所示:

|/usr/share/apport/apport %p %s %c %P

这意味着将核心转储数据通过管道传送到application apport,而application apport又可能决定在以下情况下将数据发送到文件:
崩溃的程序不是要向Ubuntu报告的程序;并且
过程的极限大于零。
因此,就内核而言,核心转储是生成的,因此WCOREDUMP()返回true是明智的。

07-24 09:37
查看更多