【发布时间】:2012-07-19 07:18:10
【问题描述】:
我正在测试一个应用程序,当应用程序消耗大部分可用内存时,内核会终止我的进程。但我希望进程死掉并生成核心文件,供调查建议。我正在使用红帽 5.4
有没有办法做到这一点?
【问题讨论】:
-
我已经设置了 ulimit -c unlimited
我正在测试一个应用程序,当应用程序消耗大部分可用内存时,内核会终止我的进程。但我希望进程死掉并生成核心文件,供调查建议。我正在使用红帽 5.4
有没有办法做到这一点?
【问题讨论】:
根据您的“大部分可用内存”描述,我假设您的系统内存不足,并且内核内存不足处理程序会终止您的进程。它被 SIGTERM 杀死,所以在正常情况下你不会得到核心转储。
您可以通过在程序中处理 SIGTERM 并在信号处理程序中向您的进程发送 SIGSEGV 来获得核心转储,从而触发核心转储。 OTOH,在内存不足的情况下,这可能会导致许多其他进程也被 OOM 处理程序杀死。
【讨论】:
许多信号的默认操作是核心转储。如果程序没有覆盖 Linux 默认信号处理程序,如果设置了正确的 ulimit,您可以使用 SIGQUIT 导致核心转储。
可以使用kill -SIGQUIT (process_id) 发送SIGQUIT,或者,如果程序与键盘相关联,则可以通过键入Ctrl-\
【讨论】:
你应该知道当 OOM 发生时你的程序会收到哪个信号。 然后使用信号函数设置处理程序
【讨论】: