nginx源码分析—信号初始化

本文详细剖析了nginx源码中的信号初始化过程,包括ngx_init_signals()函数、ngx_signal_t结构、signals数组和sigaction结构。重点讨论了如何通过ngx_signal_value获取信号值,以及SIG_IGN如何表示忽略信号。同时,解释了ngx_signal_handler()函数的作用,以及在服务器性能优化中忽略SIGCHLD信号的意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:阿波
链接:http://blog.csdn.net/livelylittlefish/article/details/7308100

Content

0.

1. ngx_init_signals()函数

1.1 ngx_signal_t结构

1.2 signals数组

1.3 sigaction结构

2.几个问题

2.1ngx_signal_value宏是如何得到整数的信号值signo的?

2.2 handler=SIG_IGN=0x1是如何忽略信号的?

3.ngx_signal_handler()函数

4.小结

 

0.

本文主要分析nginx信号初始化及其处理。文中如无特别说明,.表示nginx-1.0.4代码目录,本文为/usr/src/nginx-1.0.4

1. ngx_init_signals()函数

该函数主要任务是设置signals[]数组中每个信号的action(即常说的注册、安装等)。如下。

./src/os/unix/ngx_process.c

ngx_int_t
ngx_init_signals(ngx_log_t *log)
{
    ngx_signal_t      *sig;
    struct sigaction   sa;

    for (sig = signals; sig->signo != 0; sig++) {   /* signals数组 */
        ngx_memzero(&sa, sizeof(struct sigaction)); /* 此处sigaction是一个结构类型 */
        sa.sa_handler = sig->handler;
        sigemptyset(&sa.sa_mask);    /* 清空sa_mask */
        if (sigaction(sig->signo, &sa, NULL) == -1) { /* 设置sig->signo信号的action,此处sigaction为系统API */
            ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
                          "sigaction(%s) failed", sig->signame);
            return NGX_ERROR;
        }
    }

    return NGX_OK;
}

1.1 ngx_signal_t结构

nginx的信号结构如下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值