大家好,相信大家对nginx reload过程已经很了解了,今天在对该过程做一个分析。带着如下的问题去看

 

1.全局数组 ngx_process_t    ngx_processes[NGX_MAX_PROCESSES];的含义

2.reload过程中都发生的哪些事情

3.监听端口的变化过程

4.共享内存及文件的变化

 

=================== ngx_proesses数组到底是做什么用的呢?============

它会保存当前所有子进程的相关数据信息,包括子进程的pid、当前状态等信息。如果获取的子进程pid等信息,参见另外一篇文章:https://blog.csdn.net/linux_cwg/article/details/108864775

在reload的过程中,还是会通过fork机制创建出相应的进程并放入到全局数组中,所以说,在没有关闭的情况下子进程的情况下,那么这个数组会越来越大,哈哈

 

============== reload 过程中发生的哪些事情================

1.用户通过 -s reload 命令,新启进程通过pid文件像之前的master进程发送信号 然后退出进程,完成它自己的历史使命;

2.master进程通过预先注册好的信号回调函数ngx_signal_handler函数获取信号值,然后改变全局变量ngx_reconfigure;

3.在master大循环中会发现这个ngx_reconfigure变量的变化,然后在重新启动一批子进程,由于fork的关系,新启动的子进程默认携带之前子进程相关信息(包括监听信息);

4.主进程遍历全局数组,给每一个子进程通过socket发送关闭命令,在子进程的ngx_channel_handler中识别老的子进程,然后实现关闭操作;

 

=============监听端口变化?=============

1.新的进程fork之前进程的监听信息

2.老的子进程关闭监听信息

 

=============共享内存、文件===========

1.对于共享内存,检查名字、大小等信息,如果发生变化就重新申请,如果没有变化,直接改变指针;

2.文件同理

 

以上为自己的理解,有疑问的童鞋欢迎留言,一起讨论!

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐