1

我正在测试一个应用程序,当应用程序消耗大部分可用内存时,内核会杀死我的进程。但我希望进程死掉并生成核心文件,供调查建议。我正在使用红帽 5.4

有没有办法做到这一点?

4

3 回答 3

1

根据您的“大部分可用内存”描述,我假设您的系统内存不足并且内核内存不足处理程序会杀死您的进程。它被 SIGTERM 杀死,所以在正常情况下你不会得到核心转储。

您可以通过在程序中处理 SIGTERM 并在信号处理程序中向进程发送 SIGSEGV 来获得核心转储,从而触发核心转储。OTOH,在内存不足的情况下,这可能会导致许多其他进程也被 OOM 处理程序杀死。

于 2012-07-19T07:32:19.107 回答
0

许多信号的默认操作是核心转储。如果程序没有覆盖 Linux 默认信号处理程序,如果ulimit设置了正确的,您可以使用 SIGQUIT 导致核心转储。

可以使用 SIGQUIT 发送,kill -SIGQUIT (process_id)或者,如果程序与键盘相关联,则可以通过键入 Ctrl-\

于 2012-07-19T07:42:42.903 回答
0

你应该找到当 OOM 发生时你的程序会收到哪个信号。然后使用信号函数设置处理程序

于 2012-07-19T07:55:02.230 回答