SIGCHLD:当子进程挂掉的时候,父进程会收到子进程的SIGCHLD信号。worker进程是master进程的子进程,所以当worker进程挂掉的时候,master进程会马上把它拉起来。我们来看看具体代码实现。
当子进程挂掉,父进程收到SIGCHLD信号
case SIGCHLD:
ngx_reap = 1;
break;
然后在ngx_master_process_cycle中处理
if (ngx_reap) {
ngx_reap = 0;
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "reap children");
live = ngx_reap_children(cycle);
}
其中信号的注册和回调分别在ngx_process.c中的ngx_init_signals和
ngx_signal_handler函数。