Какой компонент на самом деле сбрасывает ядро? - PullRequest
2 голосов
/ 07 декабря 2009

Я не уверен, является ли это библиотекой C или чем-то другим, что выводит содержимое в основной файл и создает программу Exit. Я имею в виду, что glibc или libc обрабатывают SIGSEGV и создают дамп ядра в функции-обработчике? Пожалуйста, объясните.

Ответы [ 4 ]

5 голосов
/ 07 декабря 2009

В 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);
4 голосов
/ 07 декабря 2009

Если другого обработчика нет, ядро ​​сгенерирует файл ядра, если ulimit -c больше 0 для процесса.

3 голосов
/ 07 декабря 2009

Ядро - это то, что создает дамп ядра, по крайней мере в Linux.

Как указывает Гонсало, ulimit -c определяет максимальный размер дампа ядра (0 отключает его полностью и указывает unlimited)нет ограничений).В зависимости от доступного дискового пространства может потребоваться установить это значение, отличное от unlimited, чтобы предотвратить заполнение диска, хотя вам, вероятно, будет трудно использовать усеченный файл ядра.

Имяфайл ядра может быть настроен с помощью /proc/sys/kernel/core_uses_pid и /proc/sys/kernel/core_pattern.

. Вы можете использовать kill -SEGV <pid> для создания дампа процесса.

1 голос
/ 07 декабря 2009

Я считаю, что это обрабатывается ядром. В Linux я не нашел библиотеку или системный вызов для ее создания вручную.

...