Я не получаю coredump со всем процессом

Я пытаюсь получить coredump, поэтому я использую:

ulimit -c unlimited

Я запускаю свою программу в фоновом режиме и убиваю ее:

kill -SEGV %1

Но я просто получаю:

[1]+  Exit 1                  ./Test

И никаких coredumps не создаются. Я сделал то же самое с другими программами, и это работает, так почему это не работает со всеми? Кто-нибудь может мне помочь?

Благодарю. (GNU/Linux, Debian 2.6.26)

3 ответа

Если ваша программа перехватывает сигнал SEGV и делает что-то еще, она не вызовет процедуру дампа ядра ОС. Убедитесь, что он этого не делает.

В Linux процессы, которые изменяют свой идентификатор пользователя с помощью setuid, seteuid или некоторых других параметров, исключаются из дампового ядра из соображений безопасности (подумайте: /bin/passwd dumps core при чтении /etc/shadow в память)

Вы можете снова включить дамп ядра в программах Linux, которые меняют свой идентификатор пользователя, вызывая prctl() после изменения UID

Также вы можете проверить, что программа, которую вы запускаете, не меняет свой рабочий каталог ( chdir()), потому что тогда он создаст файл ядра в другом каталоге, чем тот, из которого вы его запускаете.

И вы можете попробовать это тоже:

kill -ABRT pid 

Попробуйте (как root):

sysctl kernel.core_pattern=core

а затем повторите свой эксперимент. В некоторых системах эта переменная установлена ​​на /dev/null по умолчанию.

Однако, если вы видите состояние выхода 1, возможно, программа действительно перехватывает сигнал.

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