nginx reload热加载实现

nginx reload热加载实现

1.向master进程发送HUP信号(reload 命令),master进程中的ngx_reconfigure设置1 
2.master进程校验配置语法是否正确 
3.master进程打开新的监听端口(子进程会继承父进程打开的所有端口) 
4.master进程用新配置启动新的worker子进程,ngx_start_worker_processes(NGX_PROCESS_JUST_RESPAWN)新的子进
程,ngx_spawn_process函数中将判断NGX_PROCESS_JUST_RESPAWN,将ngx_processes数组respawn和just_spawn都是1
5.master进程向老worker子进程发送QUIT信号

(1)ngx_signal_worker_processes,老worker子进程的exiting设置为1,ngx_processes[i].exiting  =1

(2)子进程收到信号将子进程的ngx_quit设置为1

问题: 
如何判断向哪些老worker子进程发送信号呢?ngx_process数据中just_spawn标记不是1的 

老worker子进程退出后,master进程收到信号SIGCHLD信号,ngx_reap位置1,主进程执行ngx_reap_children函数,为什么没有讲死亡的子进程重新拉起?在ngx_reap_child函数中ngx_processes.ngx_exiting为1的进程不调用ngx_spawn_children生成子进程
6.老worker进程关闭监听句柄(标志新的连接只会到新的worker),设置ngx_exiting为1,处理完当前连接结束进程,定
时器超时则退出worker;
6.1ngx_exiting为1,则开始准备关闭worker进程 
(1)根据当前ngx_cycle_t中所有正在处理的连接,调用它们对应的关闭连接处理方法 
就是将连接中的close标志位置为1,再调用读事件的处理方法 
(2)检查ngx_event_timer_rbtree红黑树不为空,调用ngx_process_events_and_timers方法处理事件 
如果为空,表示已经处理完所有的事件,这时将调用所有模块的exit_process方法,最后销毁内存池,退出整个worker进程

nginx reload热加载实现_第1张图片

你可能感兴趣的:(Linux网络编程,nginx)