我的应用程序崩溃,退出代码为9(SIGKILL)

我从不运行任何命令(例如“kill -9(pid)”或“pkill(进程名称)”)可以杀死正在运行的进程。

在这种情况下,应该从哪里开始调试?

  • 我试图在程序崩溃时转储堆栈跟踪,但是我发现SIGKILL无法捕获以进行错误处理。
  • 该程序使用MPI并在群集环境中运行。它在运行约1小时后死亡。

  • 是否有可能导致SIGKILL异常的常见原因?

    (它在linux上运行; cent os 7)

    最佳答案

    @我回答了我自己的问题,以便以后有人获得帮助。

    异常是由OutOfMemory引起的。

    该进程分配了过多的内存,给OS造成了压力。该操作系统有一个杀手 oom-killer ,为了系统稳定,它会杀死此类进程。 oom-killer使用称为SIGKILL的子弹。

    但是,由于SIGKILL是不可见的(无法被应用程序捕获和处理),因此对于包括我在内的某些新手来说,找出崩溃的真正原因并不总是那么容易。

    一个好消息是,当杀手杀死您的进程时,它总是将其操作记录在/var/log/messages中。

    取决于您的操作系统配置,oom-killer可能根本不会记录任何消息。在这种情况下,您也可以对其进行配置。在Google中搜索rsyslog配置。

    Finding which process was killed by Linux OOM killer

    关于c++ - C++程序因退出代码: 9 (SIGKILL)而崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40888164/

    10-09 19:09