linux上的c++应用程序,在终止之前挂起

c++ application on linux, on hook before kill

本文关键字:终止 挂起 上的 c++ 应用程序 linux      更新时间:2023-10-16

我多次遇到Linux上的Linux内存不足杀手看门狗正在杀死我的应用程序,这很难调试和识别。。。

在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 handlern");
  }
  // Rest of your application
}

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

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