Я не получаю 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, возможно, программа действительно перехватывает сигнал.