当出现段错误并生成进程 coredump 时,内核和用户空间(w.r.t Linux)中发生的事件顺序是什么?
Linux 确实支持 sigsegv 处理程序。 如何调用信号处理程序并在返回时生成核心转储?
我正在寻找事件序列和任何指向 Linux 内核函数名称(w.r.t 任何最新内核)的指针。 我将从函数名称中计算出其余部分,我知道可以从代码中找出其余部分。
最佳答案
当生成 SIGSEGV 时,内核会检查是否有对应的处理程序。如果有,它将调用它,就像任何其他信号一样。如果有handler,则不会生成core。这发生在 get_signal_to_deliver 中:https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/kernel/signal.c#n2192
如果达到 SIGSEGV 的默认操作,它将生成核心转储并退出。 coredump由fs/coredump.c中的do_coredump生成:https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/coredump.c#n485
关于Linux内核: sequence of events/paths before process coredump happens,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16630680/