WCOREDUMP(状态)似乎总是返回true,即使该功能已关闭

时间:2015-11-22 01:48:14

标签: c process core

不知何故,看起来WCOREDUMP(status)始终告诉我已创建core文件。

fork()当我收到SIGCHLD信号时,我使用waitpid(...&status...);

然后,当我使用WIFSIGNALED(status)时,我会看到WTERMSIG(status)(代码11)的预期分段错误,当我调用WCOREDUMP(status)时我也会得到真的。

但是,默认情况下,Ubuntu设置为不生成核心转储文件。为什么WCOREDUMP()仍然返回true? (除非core文件保存在除当前目录之外的其他地方?)

1 个答案:

答案 0 :(得分:1)

我发现核心转储文件是由内核生成并发送到apport应用程序的。该信息位于man 5 core,其中有一个部分:

  

将核心转储管道添加到程序

此程序在/proc/sys/kernel/core_pattern中定义,在大多数Ubuntu系统中,如下所示:

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

这意味着将核心转储数据传输到应用程序apport,而apport又可以决定将数据发送到文件

  1. 崩溃的程序不是要向Ubuntu报告的程序;
  2. 您的流程的ulimit大于零。
  3. 因此,就内核而言,核心转储已生成,因此WCOREDUMP()返回true是明智的。