使用asio捕获信号,处理程序退出
Boost.Asio支持信号量,比如SIGTERM(软件终止)、SIGINT(中断信号)、SIGSEGV(段错误)等等。 可以创建一个signal_set实例,指定异步等待的信号量,然后当这些信号量产生时,就会调用你的异步处理程序:
#include <iostream>
#include <boost/asio.hpp>
using namespace std;
using namespace boost;
using namespace boost::asio;
void signal_handler(const boost::system::error_code & err, int signal)
{
// 纪录日志,然后退出应用
cout<<"err = " << err << " sig = " << signal<<endl;
}
int main()
{
cout<<"start"<<endl;
io_service service;
boost::asio::signal_set sig(service, SIGINT, SIGQUIT);
sig.async_wait(signal_handler);
service.run();//必须调用run函数
cout<<"end"<<endl;
return 0;
}