C++;Linux二进制文件以SIGKILL信号终止-为什么?(以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)

C++;Linux二进制文件以SIGKILL信号终止-为什么?(以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),c++,ubuntu,gdb,C++,Ubuntu,Gdb,我真的不知道为什么会这样,为什么我不能做一个回溯来看看它是如何存在的?有人有什么想法吗?它永远不会结束:( 谢谢 我真的不知道为什么会这样 这通常意味着 其他一些进程执行了一个kill-9,或者 内核OOM杀手认为您的进程消耗了太多的资源,并终止了它(实际上是内核为它执行了kill-9)。您应该查看/var/log/messages(/var/log/syslog在Ubuntu变体上)以了解这方面的痕迹——内核通常会在OOM某个进程时记录一条消息 为什么我不能做回溯来看看它是如何退出的 因为

我真的不知道为什么会这样,为什么我不能做一个回溯来看看它是如何存在的?有人有什么想法吗?它永远不会结束:(

谢谢

我真的不知道为什么会这样

这通常意味着

  • 其他一些进程执行了一个
    kill-9
    ,或者
  • 内核OOM杀手认为您的进程消耗了太多的资源,并终止了它(实际上是内核为它执行了
    kill-9
    )。您应该查看
    /var/log/messages
    /var/log/syslog
    在Ubuntu变体上)以了解这方面的痕迹——内核通常会在OOM某个进程时记录一条消息
为什么我不能做回溯来看看它是如何退出的

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

在我的情况下是崩溃(AV)。即使连接了GDB,我也无法捕获此违规行为。

希望有帮助

进程可能运行到cpu时间ulimit。如果“cpu时间”设置为“无限”,请在实际启动进程的环境中使用ulimit-a进行检查

如果您使用的是Unix/Linux,您还应该能够在终端上键入
dmesg
,并查看进程终止的原因。在我的情况下,它确实是OOM。

或者程序员出于某种原因想变得聪明,其中一个线程正在使用SIGKILL终止自己的程序。我应该检查另一个日志吗(我在ubuntu上)@Geesu:check/var/log/syslogals
strace
可以帮助您找到访问不可访问或受限操作系统资源的尝试,并找到导致
sigkill
的原因。在我的例子中,这是一个内存不足的问题,系统似乎要杀死它:[417558.146474]内存不足:杀死进程20867(xxxx)得分42或牺牲子进程[417558.147973]镇静工艺20867(xxxx)总vm:362268kB,anon rss:271668kB,文件rss:2728kB,shmem rss:0kB,这不会导致分段错误吗?这不是缓冲区溢出吗?@yash101为什么会导致segfault?分段错误是指一个人以不允许的方式访问内存。它与CPU时间无关。我什么时候做了这样的评论,为什么?毫无意义!我觉得有些东西变了!dmesg通往goYes的路,dmesg工作了,并告诉你它发生的原因。在我的例子中,它显示了[5087530.276277]内存不足:杀死进程19056…[5087530.276324]杀死进程19056。。。