int ngx_cdecl
main(int argc, char *const *argv)
{
....
#if !(NGX_WIN32)
if (ngx_init_signals(cycle->log) != NGX_OK) { // 服务器启动时进行初始化信号处理
return 1;
}
if (!ngx_inherited && ccf->daemon) {
if (ngx_daemon(cycle->log) != NGX_OK) {
return 1;
}
ngx_daemonized = 1;
}
if (ngx_inherited) {
ngx_daemonized = 1;
}
#endif
......
// 单进程服务器
if (ngx_process == NGX_PROCESS_SINGLE) {
ngx_single_process_cycle(cycle);
} else {
ngx_master_process_cycle(cycle);
}
return 0;
}
下来再看看ngx_init_signals函数实现之前先看看结构
typedef struct {
int signo; // 信号值
char *signame; // 信号名字
char *name; // 服务器响应信号操作的名字
void (*handler)(int signo);// 信号处理函数
} ngx_signal_t;
再看看全局变量ngx_signal_t signals[] 所有的信号及其处理函数
ngx_signal_t signals[] = {
{ ngx_signal_value(NGX_RECONFIGURE_SIGNAL),
"SIG" ngx_value(NGX_RECONFIGURE_SIGNAL),
"reload",
ngx_signal_handler },
{ ngx_signal_value(NGX_REOPEN_SIGNAL),
"SIG" ngx_value(NGX_REOPEN_SIGNAL),
"reopen",
ngx_signal_handler },
{ ngx_signal_value(NGX_NOACCEPT_SIGNAL),
"SIG" ngx_value(NGX_NOACCEPT_SIGNAL),
"",
ngx_signal_handler },
{ ngx_signal_value(NGX_TERMINATE_SIGNAL),
"SIG" ngx_value(NGX_TERMINATE_SIGNAL),
"stop",
ngx_signal_handler },
{ ngx_signal_value(NGX_SHUTDOWN_SIGNAL),