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中经常会用到这两个函数,因此 ...
随机推荐
- Weblogic Server 的下载,安装配置与部署
下载 下载页面: http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-for-dev-1703574.html 目前 ...
- [笔记] OS X and iOS 内核开发
一.KEXT包的安全性说明 KEXT 程序包及其包含的所有文件及文件夹必须属于 root 用户(用户 id 是 0) KEXT 程序包及其包含的所有文件及文件夹必须属于 wheel 组(组 id 是 ...
- windows服务1053错误排查
公司员工离职,接手他的任务,告诉我windows服务已经完成,没来得及测试.好吧,我接着做...... 服务生成后,运行bat文件.启动服务失败,提示错误编码1053.根据以往的经验,一般是三方面引起 ...
- CKeditor 集成 CKFinder
之前照着网上的做,遇到了一些问题,经过多次实验修改最后算是成功了,下面进行详细讲解. 一.CKeditor的配置(附件中已有最新版CKeditor和CKFinder) 1.需要下载ckeditor, ...
- mysql 和 mongo db 语法对比
本文描述了MySQL中的常用SQL语句在MongoDB中的写法,如果你长期使用MySQL而对MongoDB跃跃欲试,这篇简单的文章可以帮助你更快的进入角色.查询:MySQL:SELECT * FROM ...
- 第一个python
import MySQLdb import os,sys import string dto=os.getcwd()+"\\dto" dao=os.getcwd()+"\ ...
- ios搭建开发环境
ios搭建开发环境 好久就想试水IOS开发了,由于开发环境限制,一直局限于理论和虚拟机,近来入手了MacBook Pro,也来尝尝鲜,笔者也是现学现总结,如果有不足,请指正. IOS开发必备MAC O ...
- 解决WP7的32位图像渐变色色阶问题
做游戏时发现背景图色阶现象严重,想了想会不会是显卡色深问题,于是加了下面一段代码,结果解决这个问题. graphics.PreferredBackBufferFormat = Microsoft.Xn ...
- Composite C1是一个.Net平台上开源专业的CMS开源项目
CompositeC1 4 发布 Composite C1是一个.Net平台上开源专业的CMS开源项目,很多的功能用户界面,面向任务的支持与各种工具协作.当编辑内容时在用户端体验很友好.编辑器与开发者 ...
- 激活phpstorm10.0.1
注册时选择“License server”输入“http://idea.lanyus.com/”点击“OK”快速激活JetBrains系列产品