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

nginx启动过程分析的更多相关文章

  1. nginx启动、关闭、重启

    1.启动 [root@localhost local]# nginx/sbin/nginx #启动 [root@localhost local]# nginx/sbin/nginx -t #检查配置文 ...

  2. ASP.Net Core MVC6 RC2 启动过程分析[偏源码分析]

    入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢? .NET Web Development and Tools Blog ASP.NE ...

  3. linux nginx 启动脚本

    linux nginx 启动脚本 [root@webtest76 ~]# vi /etc/init.d/nginx #!/bin/bash # nginx Startup script for the ...

  4. 开机SystemServer到ActivityManagerService启动过程分析

    开机SystemServer到ActivityManagerService启动过程 一 从Systemserver到AMS zygote-> systemserver:java入层口: /** ...

  5. Nginx 启动脚本/重启脚本

    第一步先运行命令关闭nginx sudo kill `cat /usr/local/nginx/logs/nginx.pid` 第二步 vi /etc/init.d/nginx 输入以下内容 #!/b ...

  6. Neutron分析(2)——neutron-server启动过程分析

    neutron-server启动过程分析 1. /etc/init.d/neutron-server DAEMON=/usr/bin/neutron-server DAEMON_ARGS=" ...

  7. Nginx启动停止命令

    操作环境是Windows 一.nginx命令:启动nginx 在Windows上安装好nginx后,我们需要启动nginx服务,启动nginx服务的命令行操作主要有两种方式,即 cd D:\opens ...

  8. Nginx学习之十一-Nginx启动框架处理流程

    Nginx启动过程流程图 下面首先给出Nginx启动过程的流程图: ngx_cycle_t结构体 Nginx的启动初始化在src/core/nginx.c的main函数中完成,当然main函数是整个N ...

  9. nginx启动报错(1113: No mapping for the Unicode character exists in the target multi-byte code page)

    使用windows版本的nginx启动时遇到(1113: No mapping for the Unicode character exists in the target multi-byte co ...

随机推荐

  1. Java算法——O(n)查询数列中出现超过半数的元素

    主要思想: 相邻元素两两比较,如果相同存入新数组,不同二者都删除.如果 某数出现次数超高n/2,则最后剩下的1元素为所求. public static int findMostElem(final A ...

  2. JAVA ThreadPoolExecutor(转)

    原文链接:http://blog.csdn.net/historyasamirror/article/details/5961368 基础 在我看来,java比C++的一个大好处就是提供了对多线程的支 ...

  3. 在 Linux RedHatEL6 环境下安装配置 JDK1.7 + Tomcat7.0 + MySQL5.6

    RedHatEL6 JDK安装路径: /usr/java/jdk1.7 Tomcat安装路径:/usr/local/tomcat7/ MySQL安装路径: /usr/local/mysql 总共分为以 ...

  4. linux64位系统中g++4.4.7下使用wcsncpy函数有造成段错误的BUG(其它g++版本号未知)

    一.描写叙述 眼下已经linux64位系统中g++4.4.7下发现了该bug.其它的版本号还未測试. 经測试,假设传入wcsncpy函数第一个參数(即目标缓冲区)的地址不能被4整除的话就必然会发生段错 ...

  5. Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)

        Android开发做到了一定程度,多少都会用到自定义控件,一方面是更加灵活,另一方面在大数据量的情况下自定义控件的效率比写布局文件更高.     一个相对完善的自定义控件在布局文件中和java ...

  6. CSS中的repeat

    Repeat-x是横向铺满,就是图片会横向重复,直到铺满. Repeat-y是纵向铺满,就是让图片纵向重复,直到铺满. 如果不想让重复,就直接为:no-repeat.

  7. C#直接插入排序

    以Int类型数组为举例 namespace 直接插入排序 { class Program { private static void Insert(int[] arrayList) { bool is ...

  8. HDU 1045(质因数分解)

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description Tomor ...

  9. 添加站点图标: 为SAE上的WordPress站点添加自己的Favicon

    由于插件 Jetpack的"添加站点图标"功能有问题, 无法从本地上传ico文件到SAE的Storage. 因此需要手动添加站点图标. Step 1: 制作或下载自己的ico文件, ...

  10. 小小换行符乱谈(文本文件vs二进制文件)

    使用 C 语言的 fopen 打开文件时,可以指定的 mode 有 12 个,其中 6 个包含  "b" 使用 C++ 的 fstream 打开文件时,可用的模式组合有 24 个( ...