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中经常会用到这两个函数,因此 ...
随机推荐
- 2014.3.11-C语言学习小结
文件操作: 知识点: 持久化 1.文本文件的读写 2.二进制文件的读写 3.缓冲文件系统 1.打开文件 2.读写文件 3.保存 4.关闭文件 ============================= ...
- The initialization of the CRM authentication pipline execution has failed
由于公司电路切换,昨天晚上不得不将服务器暂时关闭.早上重新开机时,发现开发环境连不上了.这可把我急坏了,大家可都等着开发呢. 于是查看服务器错误消息,发现时数据库连接连接不上. The initial ...
- 1 MySQL概述
目录: 1. 简述 2. 历史 3. 同类产品 4. 优点和不足 5. MySQL存储引擎 6. MySQL架构 1. 简述 MySQL是一个关系型数据库管理系统.其体积小,速度快,开发源代码,使用成 ...
- Dotfuscator注册码和XenoCode注册码
.net加密工具注册码:Dotfuscator注册码如下: Your serial number is 14705 Your Confirmation Numb ...
- 可编辑DIV (contenteditable="true") 在鼠标光标处插入图片或者文字
近期需开发一个DIV做的编辑器,插入表情图片可直接预览效果,仔细参考了下百度贴吧的过滤粘贴过来文件的THML代码,自己整理了下.写出来只是和大家分享下,我自己也不大懂,经过努力,幸好搞定. 蛋疼的事情 ...
- javascript full screen 全屏显示 页面元素
javascript full screen 全屏显示 页面元素 要想让页面的某个元素全屏显示,就像在网页上看视频的时候,可以全屏观看一样,该怎么实现呢? 一种最简单的方式,就是动态改变你想要全屏显示 ...
- ecexl操作
/// <summary> /// 写入ecexl /// </summary> /// <param name="dt"></param ...
- MS数据库优化查询最常见的几种方法
1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大 ...
- mov sreg, r/m16 在16位和32位编程中的区别
总结于<X86汇编语言 从实模式到保护模式> 仅适用于X86系列处理器 1. 两者的区别: 例:mov ds, ax A.在指定16位编译模式下,产生的二进制码是 8E D8 B.在指定3 ...
- 设计师和开发人员更快完成工作需求的20个惊人的jqury插件教程(上)
[转] 设计师和开发人员更快完成工作需求的20个惊人的jqury插件教程(上) jquery的功能总是那么的强大,用他可以开发任何web和移动框架,在浏览器市场,他一直是占有重要的份额,今天,就给大家 ...