Apache main函数执行流程

变量:

process_rec,a structure that represents one process。

 

struct process_rec { apr_pool_t *pool; //全局池 apr_pool_t *pconf; //配置池 int argc; //参数个数 const char * const *argv; //参数 const char *short_name; };//表示进程的数据结构

 

apr_pool_t:基本池类型

 

1: AP_MONCONTROL(0); 代码剖析控制

 

2: process = init_process(&argc, &argc); //进程初始化,process代表主进程信息。

 

3: apr_pool_create(&pcommands, pglobal);

      apr_pool_tag(pcommands, "pcommands");

      pcommands --> 命令行参数池

 

4: error = ap_setup_prelinked_modules(process); //将所有预连接的模块加入到加载模块链表中。

 

5: ap_run_rewrite_args(process);

rewrite_args是为MPM模块设置的,允许MPM模块对命令行中的传入参数进行重写。

 

6: 参数处理

apr_getopt_t *opt;

apr_getopt_init(&opt, pcommands, process->argc, process->argv);

处理参数传入opt。

while((rv=apr_getopt(opt, AP_SERVER_BASEARGS, &c, &optarg)) == APR_SUCCESS) {

char **new;

switch(c) {

case 'c':

}

}

 

7: apr_pool_create(&plog, pglobal);

apr_pool_tag(plog, "plog");

内存池,内存池树

 

8: ap_replace_stderr_log(process->pool, temp_error_log);

输出日志文件替换。

 

9: 读取配置

server_conf = ap_read_config(process, ptemp, confname, &ap_conftree);

解析成配置树。

 

10: ap_run_pre_config(pconf, plog, ptemp);

触发模块的pre_config挂钩,是模块可以修改配置树。

 

11: ap_process_config_tree

处理配置树。

 

12: signal_server = APR_RETRIEVE_OPTIONAL_FN(ap_signal_server);

ap_run_post_config(pconf, plog, ptemp, server_conf);

 

13: for(;;) 主循环

请求处理被分割为多个挂钩阶段,每个阶段实现一个特定的任务,开发人员注册挂钩。Apache会自动执行所有挂钩函数。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值