您的位置:首页 > 运维架构 > Nginx

Nginx源码main函数解读

2015-12-12 00:52 561 查看

Nginx源码剖析 框架篇

 

 

 

nginx的main函数解读

nginx启动显然是由main函数驱动的,main函数在在core/nginx.c文件中,其源代码解析如下,涉及到的数据结构在本节仅指出其作用,将在第二节中详细解释。

nginx main函数的流程图如下:



需要说明的:

1.始化错误提示列表

以errno为下标,元素就是对应的错误提示信息。

 


 
2.获取命令行参数,保存在全局变量中

可以设置的命令行参数如下表所示

 


 


 

 

3.时间、正则表达式和log的初始化

 


 4.初始化cycle结构,创建内存池 

 


 
5.保存命令行参数到几个全局的变量中

 


将命令行参数保存到ngx_os_argv、ngx_argc以及ngx_argv这几个全局的变量中。这算是一个备份存储,方便以后master进程做热代码替换之用。

 

6.用命令行参数初始化cycle




 用命令行参数得来的全局变量初始化cycle的conf_prefix(配置文件所在路径的前缀)、prefix(nginx可执行文件所在路径)、conf_file(配置文件名)和conf_param(通过命令行-g选项指定的全局配置信息)

7.根据操作系统确定一些参数



信息会被保存到一些全局变量中,如页大小ngx_pagesize, CPU cacheline

 

 

8.初始化一个做循环冗余校验的表



初始化一个做循环冗余校验的表,由此可以看出后续的循环冗余校验将采用高效的查表法

 

9.通过环境变量NGINX完成socket的继承


 

通过环境变量NGINX完成socket的继承,继承来的socket将会放到init_cycle的listening数组中。同时可以读取master进程传递的平滑升级信息等等

 

10.初始化所有模块的index信息



 

初始化所有模块的index信息,即对所有模块进行编号,ngx_modules数却是在自动编译的时候生成的,位于objs/ngx_modules.c文件中

 

11.初始化ngx_cycle  ※

 


 用上面收集的init_cycle信息初始化ngx_cycle,这行代码是nginx启动过程中最重要的一个步骤,在第3节将详细展开。

12.获取配置项



9)ccf 为ngx_core_conf_t 将在第2节给出详细定义,这个地方需要解释下

ccf->master是从配置文件中解析master_process配置项所得的值,初始化为NGX_CONF_UNSET(-1),在配置项中,

如果flag类型的配置项master_process被设置为on,则其值为1,

如果为off,则其值为0,

ngx_process为全局变量,用于记录要采用的工作模式,未被初始化,因此初始值是0(uint型全局变量会被系统默认初始化为0),相关宏定义如下:

#define NGX_PROCESS_SINGLE     0

#define NGX_PROCESS_MASTER     1

#define NGX_PROCESS_SIGNALLER  2

#define NGX_PROCESS_WORKER     3

#define NGX_PROCESS_HELPER     4

因此,下面的if判断语句的含义就是:用来处理一种特殊情况,即如果在配置项中未设置master_process配置项或者是设置为打开,ngx_process未被设置,采用默认值0,这个时候要采用master工作模式。因为master_process优先级高,且nginx默认采用master模式如果在配置项中设置master_process为off,那么if依据不会执行。最终nginx工作模式取决于ngx_proces的初值0,即采用单进程模式。

 

13.初始化信号






初始化信号;主要完成信号处理程序的注册

14.创建守护进程



无继承sockets,且设置了守护进程标志,则创建守护进程

 

 

15.创建进程记录文件



 非NGX_PROCESS_MASTER=1进程,不创建该文件

 

 

16.进入进程主循环

 


根据ngx_process确定启动单进程模式还是多进程模式

 

/**********************************witch*****************************/
http://blog.csdn.net/witch_soya
 /**********************************2015年9月10日 15:11:16*****************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: