5. sigaction 函数

TOC

程序异常退出大部分都是系统发出的信号导致的,程序收到某些信号退出时,会产生core文件,如段错误信号SIGSEGV;但是某些信号不会产生,core文件,程序收到此类信号默认退出,排查这类问题时,会抓不到方向。

因此有必要对这类信号,进行捕获并记录日志。linux有一套处理信号的API。

样例

#include <signal.h>


#define ARRAY_SIZE(arr) (sizeof((arr))/sizeof((arr[0])))


/*
信号说明:
https://blog.csdn.net/wesleyluo/article/details/5279482
*/


//根据需要增删捕获的信号
static int s_arSignal[] = {SIGINT, SIGTSTP, SIGTERM, SIGPIPE, SIGALRM, SIGUSR1, SIGUSR2};


void signal_handle(int signo)
{
    LOG_PRINTF(LOG_LEVEL_ERROR, LOG_MODULE_SYS, "Handle signo:%d", signo);
}




int signal_capture(void)
{
    int i = 0;
    struct sigaction act;
    act.sa_handler = signal_handle;//将信号处理动作设置为信号捕捉
    act.sa_flags = 0;  
    sigemptyset(&act.sa_mask);


    for(i = 0; i < ARRAY_SIZE(s_arSignal); ++i)
    {
        sigaction(s_arSignal[i], &act, NULL);
    }


    return 0;
}

原文地址:https://www.cnblogs.com/standardzero/p/12552718.html