Nginx源码main函数解读

Nginx源码剖析 框架篇

 

 


 

nginxmain函数解读

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

nginx main函数的流程图如下:


需要说明的:

1.始化错误提示列表

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

 

 

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

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

 

 

 

 

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

 

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

 

 

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

 

将命令行参数保存到ngx_os_argvngx_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_cyclelistening数组中。同时可以读取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为全局变量,用于记录要采用的工作模式,未被初始化,因此初始值是0uint型全局变量会被系统默认初始化为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_processoff,那么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*****************************/


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值