nginx启动过程分析
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启动过程分析的更多相关文章
- nginx启动、关闭、重启
1.启动 [root@localhost local]# nginx/sbin/nginx #启动 [root@localhost local]# nginx/sbin/nginx -t #检查配置文 ...
- ASP.Net Core MVC6 RC2 启动过程分析[偏源码分析]
入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢? .NET Web Development and Tools Blog ASP.NE ...
- linux nginx 启动脚本
linux nginx 启动脚本 [root@webtest76 ~]# vi /etc/init.d/nginx #!/bin/bash # nginx Startup script for the ...
- 开机SystemServer到ActivityManagerService启动过程分析
开机SystemServer到ActivityManagerService启动过程 一 从Systemserver到AMS zygote-> systemserver:java入层口: /** ...
- Nginx 启动脚本/重启脚本
第一步先运行命令关闭nginx sudo kill `cat /usr/local/nginx/logs/nginx.pid` 第二步 vi /etc/init.d/nginx 输入以下内容 #!/b ...
- Neutron分析(2)——neutron-server启动过程分析
neutron-server启动过程分析 1. /etc/init.d/neutron-server DAEMON=/usr/bin/neutron-server DAEMON_ARGS=" ...
- Nginx启动停止命令
操作环境是Windows 一.nginx命令:启动nginx 在Windows上安装好nginx后,我们需要启动nginx服务,启动nginx服务的命令行操作主要有两种方式,即 cd D:\opens ...
- Nginx学习之十一-Nginx启动框架处理流程
Nginx启动过程流程图 下面首先给出Nginx启动过程的流程图: ngx_cycle_t结构体 Nginx的启动初始化在src/core/nginx.c的main函数中完成,当然main函数是整个N ...
- 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 ...
随机推荐
- 01_什么是Elasticsearch
Logstash是一个开源的用于收集,分析和存储日志的工具. Kibana4用来搜索和查看Logstash已索引的日志的web接口.这两个工具都基于 Elasticsearch. Logstash: ...
- HDOJ 1253 胜利大逃亡(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 思路分析:因为问题需要寻找到达终点的最短的距离(最短的步数),即在状态转换图上需要找出层次最浅的 ...
- JS动态增加页面上的控件实例
<input type="button" value="继续添加" onclick="append();"/ > & ...
- vs2013 linq to mysql
安装文件 1.下载安装文件 2.创建项目 3.创建mysql数据连接 4.新建ADO.NET数据模型 项目实现代码 using (WorkerContainer db = new WorkerCont ...
- C++的一些编程规范(基于google)
1.所有头文件都应该使用#define 防止头文件被多重包含,命名格式可以参考<PROJECT>_<PATH>_<FILE>_H 2.使用前置声明尽量减少.h文件中 ...
- Cocos2d-x 3.0 使用TinyXml 解析XML文件
在cocos2d-x 3.0中Xml解析已经不用自己找库了,已经为我们集成好了. text.xml <!--?xml version ="1.0" encoding =&qu ...
- 利用jxl读取excel合并的单元格的一个小样例
工作中我们可能要把Excel文件的记录保存到数据库, 今天我用jxl读取Excel文件时遇到了合并格的问题,记录例如以下: 如Excel文件例如以下: watermark/2/text/aHR0cDo ...
- Duplicate entry '97112' for key 1
1.错误描写叙述 2014-07-08 10:27:13,939 ERROR(com.you.conn.JDBCConnection:104) -com.mysql.jdbc.exceptions.j ...
- [Linux命令]查看Linux系统相关命令
#查看系统内核/操作系统/CPU信息 uname -a #返回:内核名 主机名 Linux内核版本 内核编译日期 操作系统版本 CPU型号 硬件平台 GNU/Linux#查看系统是32位还是64位un ...
- jquery日历签到控件的实现
calendar.js var calUtil = { //当前日历显示的年份 showYear:2015, //当前日历显示的月份 showMonth:1, //当前日历显示的天数 showDays ...