Сигнал не может генерировать дамп ядра после обработчика сигнала - PullRequest
2 голосов
/ 25 июля 2011

Я слышал от кого-то, что если сигнал перехватывается обработчиком сигнала, он не будет генерировать дамп ядра или бесполезный дамп ядра.

Это правильно и почему?

Работает на Linux.

1 Ответ

0 голосов
/ 25 июля 2011

Дамп ядра обычно генерируется в ответ на определенные сигналы их обработчиком по умолчанию. Если вы измените этот обработчик, вы измените ответ и не получите дамп ядра.

По умолчанию дамп ядра генерируется в ответ на сигналы, возникающие из-за сбоев (SIGSEGV (доступ к неотображенной памяти), SIGILL (недопустимая инструкция), SIGBUS (различные другие неправильные обращения к системе)) и сигнал SIGABRT, который используется когда программа сама обнаруживает фатальную ошибку (в стандартном режиме выполнения, из assert или путем вызова abort()). Это также по умолчанию для некоторых других сигналов. В частности, SIGUSR1, который программа не должна получить, если не готова обработать ее и изменить обработчик. См. man 7 signal для полного списка.

Обратите внимание, что «обработчик по умолчанию» не является кодом в приложении. Это специальное значение, указывающее ядру, что оно должно предпринять определенные действия от имени приложения. Это действие - выход для некоторых сигналов, выход с дампом ядра для других и ничего не делать для остальных.

...