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函数)的更多相关文章

  1. linux源码阅读笔记 fork函数

    在阅读源码的过程中,发现找不到fork函数的定义.后来在linux/init/main.c中找到了这样一条语句 static inline _syscall0(int,fork) 原来这里就是fork ...

  2. SequoiaDB 系列之五 :源码分析之main函数

    好久好久没有写博客了,因为一直要做各种事,工作上的,生活上的,这一下就是半年. 时光如梭. 这两天回头看了看写的博客,感觉都是贻笑大方. 但是还是想坚持把SequoiaDB系列写完. 初步的打算已经确 ...

  3. [PHP源码阅读]number_format函数

    上次讲到PHP是如何解析大整数的,一笔带过了number_format的处理,再详细阅读该函数的源码,以下是小分析. 函数原型 string number_format ( float $number ...

  4. linux源码阅读笔记 asm函数

    在linux源码中经常遇到__asm__函数.它其实是函数asm的宏定义 #define __asm__ asm,asm函数让系统执行汇编语句. __asm__常常与__volatile__一起出现. ...

  5. [Go语言]从Docker源码学习Go——main函数

    Go程序从main包下的main函数开始执行,当main执行结束后,程序退出. Docker的main函数在 docker/docker/docker.go package main //Import ...

  6. nginx 源码阅读 core

    ngx_config.h 数据对齐 #define ngx_align(d, a)     (((d) + (a - 1)) & ~(a - 1)) ngx_core.h #define ng ...

  7. nginx模块_使用gdb调试nginx源码

    工欲善其事必先利其器,如何使用调试工具gdb一步步调试nginx是了解nginx的重要手段. ps:本文的目标人群是像我这样初接触Unix编程的同学,如果有什么地方错误请指正. 熟悉gdb的使用 这里 ...

  8. 菜鸟nginx源码剖析 框架篇(一) 从main函数看nginx启动流程(转)

    俗话说的好,牵牛要牵牛鼻子 驾车顶牛,处理复杂的东西,只要抓住重点,才能理清脉络,不至于深陷其中,不能自拔.对复杂的nginx而言,main函数就是“牛之鼻”,只要能理清main函数,就一定能理解其中 ...

  9. CI框架源码阅读笔记3 全局函数Common.php

    从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...

  10. [PHP源码阅读]explode和implode函数

    explode和implode函数主要用作字符串和数组间转换的操作,比如获取一段参数后根据某个字符分割字符串,或者将一个数组的结果使用一个字符合并成一个字符串输出.在PHP中经常会用到这两个函数,因此 ...

随机推荐

  1. sprinfmvc学习--01

    springmvc框架是一个基于请求驱动的web框架,使用了前端控制器模式来设计.根据请求映射规则分发给相应的页面控制器进行处理. 1.  首先用户发送请求-->DispatcherServle ...

  2. VMware上安装ubuntu 13.04

    作者:viczzx 出处:http://www.cnblogs.com/zixuan-zhang 欢迎转载,也请保留这段声明.谢谢! 这两天打算在Linux环境下学Python语言,想换个高点的ubu ...

  3. Linux环境进程间通信(二): 信号(上)

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

  4. 支持虚拟化也开来虚拟化就是装不上HyperV的解决方法

    使用NTBOOTautofix修复BCD 今日换了台性能更强劲的电脑,本是想好好爽一下,结果却是满满的悲剧.先是硬盘里的游戏一个都打不开,8.1你要不要这么烂.好吧,不娱乐,那工作吧,结果hyper又 ...

  5. 广播,多播,IGMP:网际组管理协议

    广播,多播,IGMP:网际组管理协议 1.概述      IP有三种地址:单播地址, 广播地址,多播地址.      广播和多播仅应用于UDP.      每个以太网帧包含源主机和目的主机的以太网地址 ...

  6. create OpenVPN on ubuntu12.04

    ---恢复内容开始--- 最近比较火的有digitalocean  的SSD VPS,配置还不错.每个月5刀,512MB内存,CPU被虚拟过.不是KVM.链接能量也不大. 节点在西雅图,对环太平洋比较 ...

  7. 使用ResourceDictionary管理Logical Resources

    WPF整理-使用ResourceDictionary管理Logical Resources “Logical resources may be of various types, such as br ...

  8. Django入门实践(二)

    Django入门实践(二) Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Djan ...

  9. UVa-Where's Waldorf?

    题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  10. [置顶] vs2008 编译adb 支持4.2 android 系统(改进版)

    QQ: 2506314894 本想晚些时候放出来的,但是按捺不住啊,所以修改了之后就立即放出来了.先说明一下,这次用的adb 的源码比较新的,用的vs2008 编译出来,只有一个exe 文件,直接就可 ...