nginx工程的目录结构:
nginx
├── _include
├── signal
├── misc
├── net
├── logic
├── proc
└── app
@app:存放main函数和核心的源文件;
@_include:存放各种头文件;
@misc:存放杂合性的源文件;
@net:存放和网络处理相关的源文件;
@logic:存放和业务处理相关的源文件;
@proc:存放和进程处理有关的源文件;
@signal:存放和信号处理有关的源文件;
makefile目录结构:
nginx
├── _include
├── signal
├── └── makefile
├── misc
├── └── makefile
├── net
├── └── makefile
├── logic
├── └── makefile
├── proc
├── └── makefile
├── app
├── └── makefile
├── common.mk
├── config.mk
└── makefile
@signal/makefile:编译signal源文件;
@misc/makefile:编译misc源文件;
@net/makefile:编译net源文件;
@logic/makefile:编译net源文件;
@proc/makefile:编译proc源文件;
@app/makefile:编译app源文件;
@common.mk:各子目录会include这个文件,它是核心通用的编译文件,内容主要是编译规则;
@config.mk:编译配置文件,内容主要是存储一些变量;
@makefile:编译入口文件,用于轮询子目录下的所有编译文件;
代码逻辑:
p_config->Load("nginx.conf"); //把配置文件内容载入到内存
ngx_log_init(); //日志初始化(创建/打开日志文件),这个需要配置项,所以必须放配置文件载入的后边;
ngx_init_setproctitle(); //把环境变量搬家
cdaemonresult = ngx_daemon();//按守护进程方式运行
ngx_master_process_cycle(); //不管父进程还是子进程,正常工作期间都在这个函数里循环;
sigprocmask(SIG_BLOCK, &set, NULL); //第一个参数用了SIG_BLOCK表明设置进程新的信号屏蔽字为 “当前信号屏蔽字和第二个参数指向的信号集的并集
ngx_setproctitle(title