linux上的c++应用程序,在kill之前挂机

标签 c++ c linux kill kill-process

我多次遇到 Linux 上的 Linux Out of Memory Killer 看门狗正在杀死我的应用程序,这很难调试和识别...

在 Linux 下运行的 c/c++ 应用程序是否有在应用程序被杀死之前打印一条消息?

最佳答案

如果我是对的,OOM 将向您的进程发送一个 SIGTERM 信号,因此您可以按需要处理它。

我错了,OOM 很可能会向您发送 SIGKILL,您无能为力。但在某些情况下,您之前会收到 SIGTERM。

(未经测试的草稿)

#include <csignal>
void signal_handler(int signal) {
    // Your handling code here
}

int main() {
    // Install handler (assign handler to signal)
    std::signal(SIGINT, signal_handler);
}

C 对应方:

#include<signal.h>
#include<unistd.h>

void signal_handler(int signo)
{
  if (signo == SIGTERM) {
    // your handling code
  }        
}

int main(void)
{
  if (signal(SIGTERM, signal_handler) == SIG_ERR) {
    printf("\nError installing handler\n");
  }
  // Rest of your application
}

处理信号时要小心,因为您正在覆盖默认行为。您的程序不应忽略 SIGTERM 或 SIGINT 等重要信号:处理函数必须执行完成程序或可能调用原始处理程序的工作。

另一方面,您可以尝试一下:如果您确定问题出在分配的内存上,您可以尝试释放未使用的空间并尝试继续工作(但您需要确保信号原因是这样)。

关于linux上的c++应用程序,在kill之前挂机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36436018/

相关文章:

c++ - 如何使用boost从内存映射文件访问内存块?

c++ - 在 C/C++ 中快速读取然后从二进制文件中添加大量整数

c# - Arquivo 制作意大利面的入口文件

linux - 如何使 z= 在 vi​​m 拼写检查中看起来像 ctrl-x s

c++ - 在 C/C++ 中使用 `typedef` 的暗角?

Android NDK GCC 似乎是 clang - 它应该是这样吗?

c++ - 为什么这个结构数组上的代码有效?

c++ - 在 c/c++ 中的源文件之间共享变量的最佳策略是什么?

python - 如果任何脚本有错误,如何停止运行多个python脚本

linux - 如何让 Bash 自动将每个命令的输出传输到 tee 之类的东西?