Я не уверен, является ли это библиотекой C или какой-то другой вещью, которая выгружает содержимое в основной файл и делает программу Exit. Я имею в виду, что glibc или libc обрабатывает SIGSEGV и создает дамп ядра в функции обработчика? Пожалуйста, объясни.
Какой компонент на самом деле сбрасывает ядро?
Ответы (4)
В Linux за выполнение процессов ядра и механизмы обработки сигналов отвечают.
http://lxr.linux.no/#linux+v2.6.32/fs/exec.c#L1752
void do_coredump(long signr, int exit_code, struct pt_regs *regs)
{
...
http://lxr.linux.no/#linux+v2.6.32/kernel/signal.c#L1926
if (sig_kernel_coredump(signr)) {
if (print_fatal_signals)
print_fatal_signal(regs, info->si_signo);
/*
* If it was able to dump core, this kills all
* other threads in the group and synchronizes with
* their demise. If we lost the race with another
* thread getting here, it set group_exit_code
* first and our do_group_exit call below will use
* that value and ignore the one we pass it.
*/
do_coredump(info->si_signo, info->si_signo, regs);
Когда нет другого обработчика, ядро сгенерирует файл ядра, если ulimit -c
для процесса больше 0.
ulimit -c
, вы должны указать, что наиболее полезными значениями для передачи являются либо 0
, либо unlimited
. Я не встречал никого, кто делал вид, что может что-то сделать с усеченным дампом ядра.
- person Pascal Cuoq; 07.12.2009
Ядро — это то, что создает дамп ядра, по крайней мере, в Linux.
Как указывает Гонсало, ulimit -c
определяет максимальный размер дампа ядра (0 полностью отключает его, а unlimited
не указывает ограничения). В зависимости от доступного места на диске вы можете установить любое значение, отличное от unlimited
, чтобы предотвратить заполнение диска, хотя вам, вероятно, будет сложно использовать усеченный основной файл.
Имя основного файла можно настроить с помощью /proc/sys/kernel/core_uses_pid
и /proc/sys/kernel/core_pattern
.
Вы можете использовать kill -SEGV <pid>
для создания ядра дампа процесса.
Я считаю, что это обрабатывается ядром. Однако в Linux я не нашел библиотеки или системного вызова для создания вручную.