(1)main函数中调用
static void init_sig()
{
/*信号设置*/
struct sigaction action;
//设置常用终止信号
action.sa_handler = handler;
sigemptyset(&action.sa_mask);
action.sa_flags = 0;
sigaction(SIGHUP, &action, NULL);
action.sa_handler = handler;
sigaction(SIGTERM, &action, NULL);
action.sa_handler = handler;
sigaction(SIGINT, &action, NULL);
action.sa_handler = handler;
sigaction(SIGKILL, &action, NULL);
//异常信号设置
action.sa_handler = segv_handler;
sigemptyset(&action.sa_mask);
sigaddset(&action.sa_mask, SIGINT);
sigaddset(&action.sa_mask, SIGTERM);
sigaddset(&action.sa_mask, SIGHUP);
sigaction(SIGSEGV, &action, NULL);
sigaction(SIGILL, &action, NULL);
sigaction(SIGBUS, &action, NULL);
action.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &action, NULL);
}
(2)加入信号处理函数
//进程退出信号处理函数
static void handler(int sig)
{
printf("system exit \n");
deinit_system(); //回收资源
}
//进程异常信号处理函数
static void segv_handler(int sig)
{
printf("one exception\n");
abort();
}