coredump是一种基于异步信号的内存信息捕获机制,可以触发coredump的信号有sigbus,sigsegv,sigill,sigabrt等。查找man手册可以获得更多的信息。coredump机制提供用户态内存信息的镜像,方便用户事后debug程序。
if (sig_kernel_coredump(signr)) { //判断接收到的信号是否是coredump信号
if (print_fatal_signals)
print_fatal_signal(info->si_signo);
proc_coredump_connector(current);
/*
* 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); //coredump的实现入口
}
在do_coredump中会判断与coredump相关的一些配置信息(是否配置了管道,ulimit是否正确,文件大小以及生成路径和文件名),并且生成对应的core文件。
本文来自网易实践者社区,经作者赵建明授权发布。