NGINX----源码阅读一(main函数)
1、ngx_debug_init();
初始化debug函数,一般为空。
2、ngx_strerror_init();
将系统错误码+错误信息,以ngx_str_t数组保存。
3、ngx_get_options(int argc, char *const *argv)
nginx启动函数选项,
4、ngx_show_version_info();
如果上一步启动nginx输入量v选项,则显示nginx版本信息,
5、ngx_time_init();
初始化nginx系统时间。
如下
void
ngx_time_init(void)
{
ngx_cached_err_log_time.len = sizeof("1970/09/28 12:00:00") - ;
ngx_cached_http_time.len = sizeof("Mon, 28 Sep 1970 06:00:00 GMT") - ;
ngx_cached_http_log_time.len = sizeof("28/Sep/1970:12:00:00 +0600") - ;
ngx_cached_http_log_iso8601.len = sizeof("1970-09-28T12:00:00+06:00") - ;
ngx_cached_syslog_time.len = sizeof("Sep 28 12:00:00") - ; ngx_cached_time = &cached_time[]; ngx_time_update();
}
6.ngx_pid = ngx_getpid();
获取进程id,在进程文件process.c中,
#define ngx_getpid getpid
7、ngx_log_init(ngx_prefix);
初始化nginx日志,打开日志文件。ngx_prefix为文件路径,由nginx -p选项确定
nginx日志结构体如下
struct ngx_log_s {
ngx_uint_t log_level;
ngx_open_file_t *file; ngx_atomic_uint_t connection; time_t disk_full_time; ngx_log_handler_pt handler;
void *data; ngx_log_writer_pt writer;
void *wdata; /*
* we declare "action" as "char *" because the actions are usually
* the static strings and in the "u_char *" case we have to override
* their types all the time
*/ char *action; ngx_log_t *next;
};
8.ngx_memzero(&init_cycle, sizeof(ngx_cycle_t));初始化全局cycle
ngx_memzero(&init_cycle, sizeof(ngx_cycle_t));
//初始化init_cycle的log
init_cycle.log = log;
ngx_cycle = &init_cycle;
//给init_cycle创建内存池
init_cycle.pool = ngx_create_pool(, log);
内存池结构入口
9、ngx_save_argv(&init_cycle, argc, argv)
保存启动参数,通过alloc函数分配空间。
10、ngx_process_options(&init_cycle)
将路径及配置路径写入cycle中
cycle->conf_prefix.len = len;
cycle->conf_prefix.data = p;
cycle->prefix.len = len;
cycle->prefix.data = p;
11、ngx_os_init(log) ngx_crc32_table_init()不懂
系统初始化
12、ngx_add_inherited_sockets(&init_cycle)
这个是重启时继承监听端口。不懂
13、ngx_preinit_modules()
初始化模块,index及name
ngx_int_t
ngx_preinit_modules(void)
{
ngx_uint_t i; for (i = ; ngx_modules[i]; i++) {
ngx_modules[i]->index = i;
ngx_modules[i]->name = ngx_module_names[i];
} ngx_modules_n = i;
ngx_max_module = ngx_modules_n + NGX_MAX_DYNAMIC_MODULES; return NGX_OK;
}
14、ngx_init_cycle(&init_cycle)
这个函数做的事情比较多,开始先把原来init_cycle里的原始数据进行拷贝
然后创建并解析了核心模块的配置。这个单列出来说吧。
15.ngx_signal_process(cycle, ngx_signal);
如果ngx_signal模式启动nginx的话,nginx的启动准备工作到此就已经结束了
此步,采用非master-workers的启动模式,单进程启动nginx。
16.ngx_os_status(cycle->log);
17.ngx_init_signals(cycle->log);
18.ngx_create_pidfile(&ccf->pid, cycle->log);
19.ngx_master_process_cycle(cycle);
准备工作就绪,这里master就开始真正工作了。单列出来说下。
NGINX----源码阅读一(main函数)的更多相关文章
- linux源码阅读笔记 fork函数
在阅读源码的过程中,发现找不到fork函数的定义.后来在linux/init/main.c中找到了这样一条语句 static inline _syscall0(int,fork) 原来这里就是fork ...
- SequoiaDB 系列之五 :源码分析之main函数
好久好久没有写博客了,因为一直要做各种事,工作上的,生活上的,这一下就是半年. 时光如梭. 这两天回头看了看写的博客,感觉都是贻笑大方. 但是还是想坚持把SequoiaDB系列写完. 初步的打算已经确 ...
- [PHP源码阅读]number_format函数
上次讲到PHP是如何解析大整数的,一笔带过了number_format的处理,再详细阅读该函数的源码,以下是小分析. 函数原型 string number_format ( float $number ...
- linux源码阅读笔记 asm函数
在linux源码中经常遇到__asm__函数.它其实是函数asm的宏定义 #define __asm__ asm,asm函数让系统执行汇编语句. __asm__常常与__volatile__一起出现. ...
- [Go语言]从Docker源码学习Go——main函数
Go程序从main包下的main函数开始执行,当main执行结束后,程序退出. Docker的main函数在 docker/docker/docker.go package main //Import ...
- nginx 源码阅读 core
ngx_config.h 数据对齐 #define ngx_align(d, a) (((d) + (a - 1)) & ~(a - 1)) ngx_core.h #define ng ...
- nginx模块_使用gdb调试nginx源码
工欲善其事必先利其器,如何使用调试工具gdb一步步调试nginx是了解nginx的重要手段. ps:本文的目标人群是像我这样初接触Unix编程的同学,如果有什么地方错误请指正. 熟悉gdb的使用 这里 ...
- 菜鸟nginx源码剖析 框架篇(一) 从main函数看nginx启动流程(转)
俗话说的好,牵牛要牵牛鼻子 驾车顶牛,处理复杂的东西,只要抓住重点,才能理清脉络,不至于深陷其中,不能自拔.对复杂的nginx而言,main函数就是“牛之鼻”,只要能理清main函数,就一定能理解其中 ...
- CI框架源码阅读笔记3 全局函数Common.php
从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...
- [PHP源码阅读]explode和implode函数
explode和implode函数主要用作字符串和数组间转换的操作,比如获取一段参数后根据某个字符分割字符串,或者将一个数组的结果使用一个字符合并成一个字符串输出.在PHP中经常会用到这两个函数,因此 ...
随机推荐
- C# 制作Windows服务安装包
C# 制作Windows服务安装包 这两天公司要用C#写一个windows服务,做成安装安装包.制作的过程中遇到了一些问题,写完之后总结一下.如果以后在用到的话可以可以参考一下,而且由于原来没有做 ...
- Js面向对象编程
Js面向对象编程 1. 什么是面向对象编程? 我也不说不清楚什么是面向对象,反正就那么回事吧. 编程有时候是一件很快乐的事,写一些小游戏,用编程的方式玩游戏等等 2. Js如何定义一个 ...
- 初探原生js根据json数据动态创建table
初探原生js根据json数据动态创建table 小生以实习生的职位进入了一家非纯软件的公司做asp.net开发,大半个月下来发现公司里居然没有前端工程师,这令我很诧异,跟着公司做项目,发现前端后台没有 ...
- 一步一步深入spring(2)-三种方式来实例化bean
在一步一步深入spring(1)--搭建和测试spring的开发环境中提到了一种实例化bean的方式,也是最基本的使用构造器实例化bean 1.使用构造器实例化bean:这是最简单的方式,Spring ...
- CI持续集成
CI持续集成 “我的TDD实践”系列之CI持续集成 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先 ...
- HDU 2040 亲和数
Problem Description 古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284. ...
- 在OpenStack虚拟机实例中创建swap分区的一种方法
测试组里一个同学负责MapR的搭建,MapR文档中建议每个节点上至少有24GB的swap分区,不知道MapR为啥会有这种反人类的建议……swap无非就是一块顺序读写的磁盘空间,莫非省着内存不用,用sw ...
- android jni——helloworld
看了网上好多牛人写的学习系列都是用HelloWorld作为开始,我们这里也用HelloWorld来开始我们的学习,首先我们来介绍下JNI吧. JNI作为java代码和C/C++的桥梁而存在的,为了让j ...
- C# 数据库连接测试以及备份
现在我们要做一个如图5.1的数据库连接配置,从界面上看有三个功能需要实现:从配置文件中读取数据库连接的相关属性.备份数据库.测试连接. 现在我们就一个一个开始讲解. 图5.1 1.从配置文件中读取数据 ...
- WPF星空效果
效果 前阵子看到ay的蜘蛛网效果和知乎的登录页背景,觉得效果很酷.自己也想写一个.于是写着写着就变成这样了.少女梦幻的赶脚有木有.我这有着一颗少女心的抠脚大汉 实现思路 分为两个部分: 1.星星无休止 ...