【发布时间】:2014-01-24 23:52:07
【问题描述】:
(这里我只针对 Linux)
我假设核心是由 glibc 的默认信号处理程序生成的。
但是,如果我用谷歌搜索,大多数结果都说操作系统会生成核心转储。如果操作系统生成核心,信号处理程序将首先(或)首先转储核心?
【问题讨论】:
标签: linux gcc linux-kernel glibc coredump
(这里我只针对 Linux)
我假设核心是由 glibc 的默认信号处理程序生成的。
但是,如果我用谷歌搜索,大多数结果都说操作系统会生成核心转储。如果操作系统生成核心,信号处理程序将首先(或)首先转储核心?
【问题讨论】:
标签: linux gcc linux-kernel glibc coredump
内核自己生成核心转储。在此处查看 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_pattern 和ulimit。还可以通过信号处理机制控制这些信号的传递。
【讨论】: