如何用处理生成核心转储的异常的Linux内核中的用户定义处理程序替换默认处理程序?

时间:2011-04-26 07:02:25

标签: linux signals signal-handling

我正在研究“在Linux平台上创建Postmortem数据记录器”。我之前也发过一个关于这个项目的问题。在那里,我在RHEL版本中获得了核心转储文件创建的调用流机制:2.6.18.128-el5。

如下:

File                                       Function called
1.source/ arch/i386/kernel/signal.c -----> do_signal( )
2.source/kernel/signal.c       ----------> get_signal_to_deliver( )
3.source/fs/exec.c          -------------> do_coredump( )
4.source/fs/binfmt_elf.c    -------------> elf_core_dump( )

现在,根据项目要求,我需要使用我自己的用户定义信号处理程序修改默认信号处理程序定义,该处理程序处理各种异常(SIGSEGVSIGFPESIGABRT等)导致coredump。此外,我需要构建内核以保持内核中的更改,并使用我的处理程序替换默认处理程序。

任何人都可以分享程序进行这些操作吗?

感谢所有回复者:)

由于 vlc

1 个答案:

答案 0 :(得分:1)

SIGFPE,SIGABRT,SIGSEGV和其他一些人默认已生成核心转储,请参阅signal(7)。但是,许多发行版将核心文件大小资源限制设置为0,从而禁用核心转储生成。您可以通过以下方式重新启用它:

ulimit -c unlimited

而不是unlimited,您可以传递核心转储应该采用的最大数量的文件系统块。