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

6

(以下翻译针对Linux系统)

我假设core是由glibc的默认信号处理程序生成的。

但如果我搜索大部分结果都说操作系统生成核心转储。如果操作系统生成核心,那么信号处理程序会首先被调用(还是)核心先被转储?

1个回答

9
内核本身生成核心转储文件。请参见此处Linux内核源代码中的核心处理例程:

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

如果进程接收到以下任何信号1,内核将尝试进行核心转储。
#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  

这个核心转储是可配置的,可以通过文件/proc/sys/kernel/core_patternulimit等多种方式进行禁用或控制。人们还可以通过信号处理机制来控制这些信号的传递。

核心转储先还是信号处理程序先被调用? - Arunprasad Rajkumar
3
序列是:1-发生事件(如分段错误)2-内核通过信号通知进程此事件 3-进程处理信号(无论是用户安装的还是默认处理程序)4-在大多数情况下,上述信号会通过默认信号处理程序触发核心转储操作。 - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接