WCOREDUMP(status) 似乎总是 return true 即使该功能已关闭

WCOREDUMP(status) seems to always return true even though the feature is turned off

不知为何,WCOREDUMP(status) 总是告诉我创建了一个 core 文件。

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

然后,当我使用 WIFSIGNALED(status) 时,我看到了 WTERMSIG(status)(代码 11)的预期分段错误,不知何故,当我调用 WCOREDUMP(status).[=21= 时我也得到了 true ]

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

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

Piping core dumps to a program

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

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

这意味着将核心转储数据通过管道传输到应用程序批准,如果

,应用程序批准又可能决定将数据发送到文件
  1. 崩溃的程序不是要报告给Ubuntu的程序;
  2. 您进程的 ulimit 大于零。

因此,就内核而言,已生成核心转储,因此 WCOREDUMP() 返回 true 是明智的。