Почему мой основной файл не перезаписан?

В 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 ядра, пока я не удалю его сначала.

2 ответа

Решение

Если вы ссылаетесь на https://bugs.launchpad.net/ubuntu/+source/apport/+bug/160999 это ошибка в Ubuntu с использованием O_EXCL открыть файл, не давая ему перезаписать существующее ядро.

На странице руководства core(5) перечислены определенные условия, при которых core файл не перезаписан. Вы, вероятно, соответствуете одному из этих условий. Пожалуйста, внимательно прочитайте эту справочную страницу.

Другие вопросы по тегам