nginx的启动过程紧紧环绕着ngx_cycle_t的结构体展开,首先通过ngx_get_options()获取命令行參数。然后通过ngx_time_init()进行时间的初始化。如全局变量ngx_cached_time。再通过ngx_regx_init()完毕正则的初始化。通过ngx_log_init()创建日志对象,初始化日志,如初始化全局变量ngx_prefix。打开日志文件ngx_log_file.fd。通过ngx_create_pool()创建内存池,大小为1024B。ngx_save_argv()保存命令行參数至全局变量ngx_os_argv、ngx_argc、ngx_argv;通过ngx_process_options()处理init_cycle中的配置文件路径。初始化ngx_cycle的prefix,
conf_prefix, conf_file, conf_param等字段。ngx_os_init()完毕操作系统的一些信息的获取。如内存页面大小、系统限制资源等信息,将其保存在相应的全局变量中。通过ngx_crc32_table_init()初始化一个循环冗余校验表,为后面高效查找循环冗余做准备;通过ngx_add_inherited_sockets:通过环境变量

  • 解析环境变量NGINX_VAR="NGINX"中的sockets,并保存至ngx_cycle.listening数组;
  • 设置ngx_inherited=1;
  • 调用ngx_set_inherited_sockets()逐一对ngx_cycle.listening数组中的sockets进行设置;

然后对模块数组中的各模块进行编号。继而调用ngx_init_cycle()完毕对ngx_cycle_t类型变量cycle的初始化,在ngx_init_t中做的事情如:

之后,依据条件调用 ngx_signal_process()对进程信号处理,通过ngx_os_status()获取操作系统的状态信息,读取配置文件的信息。

  • 若有信号,则进入ngx_signal_process()处理;
  • 调用ngx_init_signals()初始化信号;主要完毕信号处理程序的注冊;
  • 若无继承sockets,且设置了守护进程标识。则调用ngx_daemon()创建守护进程。
  • 调用ngx_create_pidfile()创建进程记录文件;(非NGX_PROCESS_MASTER=1进程,不创建该文件)
  • 进入进程主循环;

    • 若为NGX_PROCESS_SINGLE=1模式,则调用ngx_single_process_cycle()进入进程循环。
    • 否则为master-worker模式,调用ngx_master_process_cycle()进入进程循环;
    • 详细可參考<nginx源代码分析—master/worker进程启动>;

參考:http://blog.csdn.net/livelylittlefish/article/details/7243718

最新文章

  1. table常用功能总结
  2. Cannot open the disk &#39;D:\Program Files\VMOS\Centos.vmdk&#39; or one of the snapshot disks it depends on
  3. SharePoint 2013 使用 PowerShell 更新用户
  4. nginx+php 安装手册
  5. mac配置appium进行自动化测试
  6. .NET Compact Framework Data Provider for SQL Server CE
  7. 高斯消元part2
  8. Flutter中SQLite数据库的使用
  9. py-faster-rcnn 训练参数修改(转)
  10. jquery选择后代以及toggle,toggleClass用法
  11. Django之视图层介绍
  12. Eureka 剔除失效服务
  13. 老猪带你玩转android自定义控件二——自定义索引栏listview
  14. jQuery:ajax处理html页面
  15. Confluence 6 设置公共访问
  16. new DialogInterface.OnClickListener()报错的解决办法
  17. .NET处理HTTP请求
  18. MySQL Python教程(2)
  19. python约束 与MD5加密写法
  20. Difference between RouteTable.Routes and HttpConfiguration.Routes?

热门文章

  1. cocos2d-x中的尺寸之一
  2. linux 多线程编程笔记
  3. opencv中遇到的的一些错误
  4. sql 和 nosql 说明
  5. MySQL 存储过程创建表
  6. Tomcat7.0.22在Windows下详细配置过程
  7. ppt类似工具AxeFile使用心得
  8. 安装Oracle,新建组、用户的时候的一个错误
  9. 一些指令 &amp; 一些知识 (Linux Spring log4j...)
  10. poj 2096