C ++ Linux Binary以SIGKILL信号终止 - 为什么? (加载到GDB中)

时间:2012-09-05 19:37:38

标签: c++ ubuntu gdb

所以我在GDB中启动我的c ++应用程序,当它退出时,我基本上得到:

[Thread 0x7fff76e07700 (LWP 6170) exited]
[Thread 0x7fff76f08700 (LWP 6169) exited]
[Thread 0x7fff77009700 (LWP 6168) exited] 
...
Program terminated with signal SIGKILL, Killed. The program no longer exists.
(gdb)

我完全不知道为什么会发生这种情况,为什么我不能做回溯看它是如何退出的呢?有人有主意吗?永远不应该结束:(

谢谢!

4 个答案:

答案 0 :(得分:26)

  

我完全不知道为什么会这样,

这通常意味着

  • 其他一些流程执行了kill -9 <your-pid>
  • 内核OOM杀手决定你的进程消耗了太多资源,并终止了它(实际上内核为它执行了kill -9)。您应该查看/var/log/messages(Ubuntu变体上的/var/log/syslog)以获取其中的痕迹 - 内核通常会在OOM进行某些过程时记录消息。
  

为什么我不能做回溯看它是如何退出的?

因为要查看回溯,所以该过程必须存在。如果它不存在,则它没有堆栈,因此不能进行回溯。

答案 1 :(得分:1)

进程可能会遇到cpu time ulimit。如果&#34; cpu time&#34;请从实际启动进程的环境中使用 ulimit -a 进行检查。设置为&#34;无限制&#34;

以外的任何内容

答案 2 :(得分:1)

如果您使用的是Unix / Linux,则还应该能够在终端上键入dmesg并查看终止过程的原因。就我而言,确实是OOM。 here is a screenshot of my kernel log shortly after the termination

答案 3 :(得分:0)

在我的情况下是一次崩溃(AV)。即使加上GDB,我也无法发现这种违规行为 希望它有所帮助