Ядро само генерирует сердечник. См основных процедур обработки в исходном коде ядра 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
. Также можно управлять подачей этих сигналов через механизмы обработки сигналов.
основной сбрасываемый первый или обработчик сигнала, называемый первым? –
Последовательность: 1 происходит событие (например, ошибка сегментации) 2- ядро уведомляет процесс об этом событии сигналом 3 обработчика процесса (либо установленным пользователем, либо обработчиком по умолчанию) 4- В большинстве случаев вышеупомянутые сигналы запускают действие coredump через обработчик сигнала по умолчанию. – Peter