nginx一般情况下都是配置成一个多进程的程序,由一个master进程和多个worker进程组成,master进程通过信号来管理worker进程的运行状态。下面从代码的角度来分析master和worker进程的启动情形。
1.在main函数最后,会根据配置方式,决定nginx的启动形式(单进程或者多进程)
if (ngx_process == NGX_PROCESS_SINGLE) {
ngx_single_process_cycle(cycle);
} else {
ngx_master_process_cycle(cycle);
}
2.在ngx_master_process_cycle中首先是完成信号配置相关程序
sigemptyset(&set);
sigaddset(&set, SIGCHLD);
sigaddset(&set, SIGALRM);
sigaddset(&set, SIGIO);
sigaddset(&set, SIGINT);
sigaddset(&set, ngx_signal_value(NGX_RECONFIGURE_SIGNAL));
sigaddset(&set, ngx_signal_value(NGX_REOPEN_SIGNAL));
sigaddset(&set, ngx_signal_value(NGX_NOACCEPT_SIGNAL));
sigaddset(&set, ngx_signal_value(NGX_TERMINATE_SIGNAL));
sigaddset(&set, ngx_signal_value(NGX_SHUTDOWN_SIGNAL));