不知怎么的,WCOREDUMP(status)
总是告诉我创建了一个core
文件。
我fork()
,当我收到SIGCHLD
信号时,我使用waitpid(...&status...);
。
然后,当我使用WIFSIGNALED(status)
时,我看到了WTERMSIG(status)
的预期分段错误(代码11),并且在调用WCOREDUMP(status)
时,不知何故我也得到了真。
但是,在默认情况下,Ubuntu设置为不生成核心转储文件。为什么WCOREDUMP()
仍然返回true?(除非core
文件保存在当前目录之外的其他地方?)
发布于 2015-11-21 22:36:02
我发现核心转储文件由内核生成并发送到apport应用程序。这些信息可以在man 5 core
中找到,其中有一节:
将核心转储到程序
这个程序是在/proc/sys/kernel/core_pattern
中定义的,在大多数Ubuntu系统中,如下所示:
|/usr/share/apport/apport %p %s %c %P
这意味着将核心转储数据输送到应用程序apport,然后应用程序可能决定将数据发送到
因此,就内核而言,生成了内核转储,因此WCOREDUMP()
返回true是明智的。
https://stackoverflow.com/questions/33850757
复制