【发布时间】:2017-04-14 18:20:44
【问题描述】:
我的应用程序因 EXIT CODE: 9 (SIGKILL) 而崩溃
我从不运行任何可以杀死正在运行的进程的命令,例如“kill -9 (pid)”或“pkill (process name)”。
在这种情况下我应该从哪里开始调试?
我尝试在程序崩溃时转储堆栈跟踪,但发现无法捕获 SIGKILL 进行错误处理。
该程序使用 MPI 并在集群环境中运行。它在运行大约 1 小时后死亡。
是否有任何常见原因会导致 SIGKILL 异常?
(在linux上运行;cent os 7)
【问题讨论】:
-
你能发布一个堆栈跟踪吗?
-
strace yourprogram来自 shell 提示符。这将产生大量的输出;忽略除最后 50 行左右之外的所有行。如果您不知道输出的含义,请在此处发布最后 50 行,未编辑。 (它们不适合 cmets。使用标签下的“编辑”链接来编辑问题的文本。) -
在调试器中运行程序来捕捉信号。
-
正如 Mathieu Van Nevel 所提到的,如果可用,请尝试
valgring 'yourprogram'。您是否可以控制您运行的网络,或者是否可以自动清理挂起的运行(即有人杀死您)? -
@syko:这是可能的,因为 OOM 会发送 SIGKILL,请参阅 this answer。 This answer 建议你可以查看日志看看是不是这样。
标签: c++ error-handling