异想天开

What's the true meaning of light, Could you tell me why

启动分析-nginx源码阅读2

日期:2014-04-20 20:31:39
  
最后更新日期:2014-04-21 09:46:28
一开始对整个过程不是很了解,顺着main函数往下看。当时看到ngx_modules这个模块的数组时,想找到这个在哪定义的。在src目录里面搜索一遭,没有找到,奇了怪。后面发现定义在编译环境里面objs/ngx_modules.c这个文件,这个文件编译时由脚本生成的。main里面的ngx_init_cycle,大概过程如下:
1.在解析配置文件之前,执行所有核心modules存在的create_conf。
2.解析完配置文件。
3.执行核心modules里面存在的init_conf。
PS:老实说这里,我也没看懂。代码虽在那个地方,但不能感觉到作者这样写的意图。
4.创建共享内存。
PS:共享内存我现在也不知道是用它来干嘛。
5.打开listen fd,按道理这里有个消息循环的,我也没有发现。
6.这样折腾后,然后执行modules里面的存在的init_module代码。后面就是清理不必要的共享内存和fd。
main函数执行完ngx_init_cycle后,继续:
1.初始化signals,是指nginx自己的signal,比如reload,stop之类的。
2.创建守护进程。
3.process cycle处理。
process cycle会创建工作进程,然后master process阻塞直到来的signal,比如reload,stop之类的。work process则进入ngx_worker_process_cycle的循环。master process和work process利用channel进行通信。
本文完,对于main启动流程,现在还不是很清楚,因为看懂那种代码的写法以及思考那样写的好处。暂且先记下。后面再改进更新。