systemctl stop service时不执行析构函数,该怎么让他优雅退出,释放资源
时间: 2023-05-16 18:06:36 浏览: 67
可以在程序中添加信号处理函数,当接收到 SIGTERM 信号时,调用析构函数释放资源并退出程序。具体实现可以参考以下代码:
```c++
#include <signal.h>
#include <iostream>
class Service {
public:
Service() {
std::cout << "Service started" << std::endl;
}
~Service() {
std::cout << "Service stopped" << std::endl;
}
void run() {
// do something
while (true) {
// do something
}
}
};
Service* service = nullptr;
void sigterm_handler(int signum) {
if (service) {
delete service;
service = nullptr;
}
exit(0);
}
int main() {
service = new Service();
signal(SIGTERM, sigterm_handler);
service->run();
return 0;
}
```
在程序中注册 SIGTERM 信号处理函数 sigterm_handler,当接收到该信号时,调用析构函数释放资源并退出程序。