Почему мой основной файл не перезаписан?
В 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
файл не перезаписан. Вы, вероятно, соответствуете одному из этих условий. Пожалуйста, внимательно прочитайте эту справочную страницу.