2014-01-07 11 views
5

(Здесь я ориентируюсь только на Linux)Кто генерирует файл дампа ядра? Ядро или glibc?

Я предполагаю, что ядро ​​генерируется обработчиком сигнала glibc по умолчанию.

Но если у меня больше всего результата Google, то OS генерирует ядро ​​ядра. Если ОС генерирует ядро, обработчик сигнала будет вызываться первым (или) ядром, сбрасываемым первым?

ответ

5

Ядро само генерирует сердечник. См основных процедур обработки в исходном коде ядра Linux здесь:

http://lxr.linux.no/linux+v3.12.6/fs/coredump.c

Если процесс получает какой-либо из следующих сигналов 1, ядро ​​отвечает попытку CoreDump.

#define SIG_KERNEL_COREDUMP_MASK (\ 
rt_sigmask(SIGQUIT) | rt_sigmask(SIGILL) | \ 
rt_sigmask(SIGTRAP) | rt_sigmask(SIGABRT) | \ 
rt_sigmask(SIGFPE) | rt_sigmask(SIGSEGV) | \ 
rt_sigmask(SIGBUS) | rt_sigmask(SIGSYS) | \ 
rt_sigmask(SIGXCPU) | rt_sigmask(SIGXFSZ) | \ 
SIGEMT_MASK 

Этот CoreDump настраивается и может быть отключена или контролируется несколькими способами, в том числе файл /proc/sys/kernel/core_pattern и ulimit. Также можно управлять подачей этих сигналов через механизмы обработки сигналов.

+0

основной сбрасываемый первый или обработчик сигнала, называемый первым? –

+0

Последовательность: 1 происходит событие (например, ошибка сегментации) 2- ядро ​​уведомляет процесс об этом событии сигналом 3 обработчика процесса (либо установленным пользователем, либо обработчиком по умолчанию) 4- В большинстве случаев вышеупомянутые сигналы запускают действие coredump через обработчик сигнала по умолчанию. – Peter

Смежные вопросы