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
这意味着将核心转储数据通过管道传输到应用程序批准,如果
,应用程序批准又可能决定将数据发送到文件
- 崩溃的程序不是要报告给Ubuntu的程序; 和
- 您进程的 ulimit 大于零。
因此,就内核而言,已生成核心转储,因此 WCOREDUMP()
返回 true 是明智的。
不知为何,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
这意味着将核心转储数据通过管道传输到应用程序批准,如果
,应用程序批准又可能决定将数据发送到文件- 崩溃的程序不是要报告给Ubuntu的程序; 和
- 您进程的 ulimit 大于零。
因此,就内核而言,已生成核心转储,因此 WCOREDUMP()
返回 true 是明智的。