谁生成核心转储文件?内核还是glibc?

Aru*_*mar 5 linux gcc coredump glibc linux-kernel

(这里我只针对Linux)

我假设核心是由glibc的默认信号处理程序生成的.

但如果我谷歌大多数结果说操作系统会产生核心转储.如果OS生成核心,信号处理程序将首先被调用(或)核心转储?

Pet*_*ter 6

内核本身生成coredump.在这里查看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  
Run Code Online (Sandbox Code Playgroud)

此coredump是可配置的,可以通过多种方式禁用或控制,包括文件/proc/sys/kernel/core_patternulimit.人们还可以通过信号处理机制控制这些信号的传递.

  • 顺序是: 1- 事件发生(如分段错误) 2- 内核通过信号通知进程此事件 3- 进程处理信号(用户安装的或默认处理程序) 4- 在大多数情况下,上述信号通过以下方式触发 coredump 操作默认信号处理程序。 (3认同)