Nginx启动初始化(1)
来源:互联网 发布:js单选框默认选中 编辑:程序博客网 时间:2024/06/13 22:29
main函数做的第一件事情就是对参数选项进行处理,和普通的Linux程序如出一辙,如下:
Nginx用此函数对参数选项进行解析,从而采取相应的动作,比如:显示版本、测试配置等功能。其实此函数实现的很简陋,远没有Linux提供的getopt()那么强悍,但却可以达到跨平台的目的。
上述几行代码的功能如其名,主要完成Nginx在时间和日志等方面的初始化工作。
将命令行参数保存到ngx_os_argv、ngx_argc以及ngx_argv这几个全局的变量中。这算是一个备份存储,方便以后master进程做热代码替换之用。
完成操作系统的一些信息获取,如内存页面大小、系统限制资源等信息;所有的这些资源都将会被保存在对应的全局变量中,因此后续访问将会很便利。
初始化一个做循环冗余校验的表,由此可以看出后续的循环冗余校验将采用高效的查表法。crc算法此处就不做分析,网上一堆一堆的相关资料,有兴趣的同学可以了解。
通过环境变量NGINX完成socket的继承,继承来的socket将会放到init_cycle的listening数组中。在NGINX环境变量中,每个socket中间用冒号或分号隔开。完成继承同时设置全局变量ngx_inherited为1。
这里将会初始化很多的东东到全局变量cycle中,是Nginx启动初始化的核心之处
注册一堆信号处理程序,需要注册的信号及相应的信号处理函数被放在一个类型为ngx_signal_t的数组signals中。数组定义在src/os/unix/ngx_process.c中。ngx_signal_t结构类型定义了信号值,信号名字,信号对应动作名以及信号处理函数。
ngx_daemon肯定就是用来实现守护进程的函数了,此处就不多废话了,有需要写server程序的,可以直接copy这段代码实现守护进程。
Nginx启动后有一个记录进程id的文件,这个文件里面就一个pid。原来这个pid就是在这个地方记录下来的。查看ngx_create_pidfile函数可以看到这样的一行代码
if (ngx_process > NGX_PROCESS_MASTER) {
return NGX_OK;
},这行代码就说明了,不是master进程时,就不创建这样的一个pid文件。
到此就基本完成Nginx的启动初始化过程了,即将开始进程相关的工作了,这里最重要的ngx_master_process_cycle这个过程,在这个过程里实现了master-worker模式的进程模型,也是生成环境下Nginx的常用模型
- Nginx启动初始化(1)
- nginx的启动初始化过程(一)
- Nginx启动初始化流程
- Nginx 启动初始化过程
- Nginx源码分析---Nginx启动初始化过程(一)
- nginx启动初始化过程(二)
- Nginx源码分析-启动初始化过程(一)
- Nginx源码分析-启动初始化过程(二)
- Nginx源码分析-启动初始化过程(一)
- Nginx源码分析-启动初始化过程(二)
- Nginx源码分析-启动初始化过程(一)
- 文章6:Nginx初始化、启动过程分析
- nginx启动流程之master进程初始化
- nginx启动流程之work初始化
- Nginx源码分析---Nginx启动初始化过程(二)
- Nginx http初始化(二)
- [Nginx日记](1)Nginx启动与关闭
- nginx (1):ubuntu下安装启动nginx
- nyoj-846-ST And BE
- Request_Session
- android应用安全——(数据抓包)跟踪监控android数据包
- python 学习
- openwrt定制管理
- Nginx启动初始化(1)
- ubuntu下android开发工具的安装
- 轻松搞定javascript预解析机构(搞定后,一切有关变态面试题都是浮云)
- CC_SYNTHESIZE
- Nginx启动(ngx_init_cycle)
- struts2---防重复提交解析
- 强大Linux网站
- Ubuntu 或 UbuntuKyKin14.04 Unity桌面风格与Gnome桌面风格的切换
- Dalvik和JVM的区别?