作者:阿波
链接: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的信号结构如下。