文章6:Nginx初始化、启动过程分析
文章内容:
一、学习方法如下:
二、概括如下:我的总结
2.1Nginx的启动是在/src/core/nginx.c中进行
2.2主要概括为两部分:
2.2.1加载和初始化各个模块
2.2.2创建进程和进程间的通信机制
三、三张调用图片
说明:关于Nginx初始化以及启动,有很多内容在介绍,也有很多人介绍的非常详细。这儿我就说一下我学习这部分的方法。一、学习方法如下: 1.安装好Eclipse开发环境,方便查阅Nginx代码,代码永远是最好的教程。文章2 Linux安装Eclipse调试程序 2.阅读livelylittlefish关于nginx的文章,其文章列表http://blog.csdn.net/livelylittlefish/article/category/838107,首先阅读模块及其初始化和启动流程两部分,再根据里面涉及的文章再去阅读。 之所以这样做,是先对整个过程有个了解。并且通过阅读代码从而了解整个过程。 3.阅读《nginx模块开发指南(中文).pdf》和《nginx源码分析.doc》和http://blog.csdn.net/kenbinzhang/article/details/4681694 启动过程分析,进一步了解整个过程文章下载地址http://download.csdn.net/detail/yankai0219/4586192 《nginx模块开发指南(中文).pdf》http://download.csdn.net/detail/yankai0219/4586189《nginx源码分析.doc》 4.最后一步也是最关键的一步,自己总结整个过程。二、概括如下:我的总结2.1Nginx的启动是在/src/core/nginx.c中进行2.2主要概括为两部分:加载和初始化各个模块,完成各个模块的配置与相互关联创建进程和进程间的通信机制
2.2.1加载和初始化各个模块1)以nginx.c的函数ngx_init_cycle为分水岭,之前的工作主要是为结构体ngx_cycle_t init_cycle赋值。2)通过函数ngx_init_cycle,加载和初始化各个模块,完成各个模块的配置与相互关联
2.2.2创建进程和进程间的通信机制1)采用master-worker方式,master进程负责管理各个worker子进程,通过socketpair向子进程发送消息2)各个worker子进程服务利用事件处理机制处理请求。通过socketpair与其他子进程通信3)进程启动的各个恰当机会会调用模块的init_module,init_process,exit_process,exit_master等钩子。不会调用init_master钩子下图:启动过程中函数的调用关系(该图片为转载)
下图:ngx_init_cycle部分的函数调用关系
下图:master-worker进程间通信