linux上的c++应用程序,在终止之前挂起
c++ application on linux, on hook before kill
我多次遇到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这样的重要信号:处理函数必须完成完成程序或调用原始处理程序的工作。
另一方面,你可以玩它:如果你确定问题是分配的内存,你可以尝试释放未使用的空间,并尝试继续工作(但你需要确保信号原因是这样)。
相关文章:
- 挂起和取消挂起一个文件DLL
- 如何防止C++遗留代码中的挂起指针
- 为什么所有C++编译器都会崩溃或挂起此代码
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- 构建挂起,即使是适度的文件大小
- 循环挂起迭代的 std::擦除 on std::list
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- 从不同进程中的另一个线程挂起/恢复线程或进程
- Boost (Beast) websocket:同步写入挂起
- 为什么析构函数挂起
- 使用互斥会挂起程序
- 在C++和 Python 程序中使用命名管道的 IPC 挂起
- 设置变量时C++程序挂起
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 从stdin读取时子进程挂起(fork/dup2竞争条件)
- linux上的c++应用程序,在终止之前挂起
- MFC应用程序挂起在发出终止信号的线程中
- 如何以独立于平台的方式终止挂起在阻塞 IO 上的线程
- Recv()调用在远程主机终止后挂起