4

在 Ubuntu 12.04 上,打开一个新的文本文件并写入:

#include <stdlib.h>

int main()
{
    abort();
    return 0;
}

现在运行:

g++ yourfile.cpp

然后运行可执行文件,它将核心转储:

./a.out

现在检查文件的 mtime:

-rw-r----- 1 xxxxx xxxxx 228K 2012-10-01 19:20:20.752136399 -0500 core

现在再次运行可执行文件:

./a.out

现在再次检查 mtime:

-rw-r----- 1 xxxxx xxxxx 228K 2012-10-01 19:20:20.752136399 -0500 core

一样的!为什么新内核不会覆盖旧内核?重建时,这会导致 gdb 抱怨内核比可执行文件旧。

为了确保这不是权限问题,我在 /tmp 的新目录中尝试了这个并在chmod -R 777 **/*里面运行。运行两次可执行文件仍然没有产生新的核心 O_o 此外,ulimit -c报告 800000000,对于这种大小的核心来说绰绰有余。

我还尝试运行一个干净的 bash,env - bash --noprofile --norc并且仍然运行二进制文件不会更新核心的 mtime,除非我先删除它。

4

2 回答 2

6

如果您参考https://bugs.launchpad.net/ubuntu/+source/apport/+bug/160999 ,这是 Ubuntu 中O_EXCL用于打开文件的错误,防止它覆盖现有核心。

于 2012-10-02T02:54:12.210 回答
2

core(5)core手册页列出了文件不被 [re-] 写入的某些条件。您可能满足其中一个条件。请仔细阅读该手册页。

于 2012-10-01T05:02:48.560 回答