【问题标题】:how to prevent linux to kill my process and generate core file instead如何防止linux杀死我的进程并生成核心文件
【发布时间】:2012-07-19 07:18:10
【问题描述】:

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

有没有办法做到这一点?

【问题讨论】:

  • 我已经设置了 ulimit -c unlimited

标签: linux core-file


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-09-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 2021-06-02
        • 1970-01-01
        • 2014-02-22
        • 2020-07-08
        相关资源
        最近更新 更多