【问题标题】:Who generate a core dump file? Kernel or glibc?谁生成核心转储文件?内核还是 glibc?
【发布时间】:2014-01-24 23:52:07
【问题描述】:

(这里我只针对 Linux)

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

但是,如果我用谷歌搜索,大多数结果都说操作系统会生成核心转储。如果操作系统生成核心,信号处理程序将首先(或)首先转储核心?

【问题讨论】:

    标签: linux gcc linux-kernel glibc coredump


    【解决方案1】:

    内核自己生成核心转储。在此处查看 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。还可以通过信号处理机制控制这些信号的传递。

    【讨论】:

    • 先转储核心还是先调用信号处理程序?
    • 序列是: 1- 事件发生(如分段错误) 2- 内核通过信号通知此事件的进程 3- 进程处理信号(用户安装或默认处理程序) 4- 在大多数情况下,上述信号通过默认信号处理程序触发 coredump 操作。
    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多