aini 发表于 2017-1-3 06:45:21

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会自动执行所有挂钩函数。
页: [1]
查看完整版本: Apache main函数执行流程