linux信号处理

#ifndef __SIGNAL_COMMON_H
#define __SIGNAL_COMMON_H

#include <string.h>



#define        NGX_OK        0
#define        NGX_ERROR    -1
#define        NGX_AGAIN    -2
#define        NGX_BUSY    -3
#define        NGX_DONE    -4
#define        NGX_DECLINED    -5
#define        NGX_ABORT    -6


#define     ngx_memset_zero(buf, n)    memset(buf, 0, n)

#endif
#ifndef __SIG_PROCESS_H
#define __SIG_PROCESS_H


#define SIGNAL_INT    SIGINT


#define SIGNAL_MAP(xxx)\
    xxx(SIGNAL_INT, signal_handler)\
    xxx(0, NULL)\

#define MAP_GEN(h, n)    {h, #h, n},

#endif
#include <signal.h>
#include <stdio.h>
#include "signal_process.h"
#include "signal_common.h"


typedef struct{
    int    signo;
    char    *signame;
    void    (*handler)(int signo);
}signal_t;

static void signal_handler(int signo);

signal_t signals[]={SIGNAL_MAP(MAP_GEN)};


static void signal_handler(int signo)
{
    #if __DEBUG__
    printf("signal_handler: [%d]\n", signo);
    #endif
    
    switch(signo)
    {
        case SIGINT:
        break;
        case SIGHUP:
        break;
        case SIGCHLD:
        break;
    }

    return;
}

int signal_init()
{
    signal_t     *sig;
    struct sigaction  sa;
    for(sig=signals; sig->signo != 0; sig++)
    {
        ngx_memset_zero(&sa, sizeof(struct sigaction));
        sa.sa_handler = sig->handler;
        sigemptyset(&sa.sa_mask);
        if(sigaction(sig->signo, &sa, NULL) == -1){
            return NGX_ERROR;
        }

    }
    return NGX_OK;
}


int main()
{
    signal_init();
    while(1)
    {};
}

 

转载于:https://www.cnblogs.com/unixshell/p/3528161.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值