NGINX reload过程
大家好,相信大家对nginx reload过程已经很了解了,今天在对该过程做一个分析。带着如下的问题去看1.全局数组ngx_process_tngx_processes[NGX_MAX_PROCESSES];的含义2.reload过程中都发生的哪些事情3.监听端口的变化过程4.共享内存及文件的变化=================== ngx_proesses数组到底是做什么用的呢?=======
大家好,相信大家对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.文件同理
以上为自己的理解,有疑问的童鞋欢迎留言,一起讨论!
更多推荐
所有评论(0)