C++Linux二进制终止信号SIGKILL-为什么?(加载在GDB中)

C++ Linux Binary terminated with signal SIGKILL - why? (loaded in GDB)

本文关键字:加载 GDB 终止 二进制 信号 SIGKILL- 为什么 C++Linux      更新时间:2023-10-16

所以我在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)

我真的不知道为什么会发生这种情况,为什么我不能追溯一下它是如何退出的?有人有什么想法吗?它永远不会结束:(

谢谢!

我真的不知道为什么会发生这种情况,

这通常意味着

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

为什么我不能进行回溯以查看它是如何退出的?

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

如果您使用Unix/Linux,您也应该能够在终端上键入dmesg,并查看进程终止的原因。就我而言,这确实是OOM。这是终止后不久我的内核日志的屏幕截图

进程可能运行到cpu时间ulimit。如果"cpu时间"设置为"无限制"以外的任何值,请从进程实际启动的环境中使用ulimit-a进行检查

在我的案例中发生了崩溃(AV)。即使附上GDB,我也无法捕捉到这种违规行为
希望它能帮助