资源描述:
《apache的启动过程 原代码 分析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1./server/log.c这个里面定义了ap_log_error()。2./include/httpd.h这个文件里面申明了基本的内容,如文件路径,字符串长度,等等。3./server/listen.c对于apache的httpd,有很多的技术,有MPM多任务并发处理(采用记分板),内存池,线程池。。。1.在main()有一个for(;;)里面调用了ap_mpm_run。但这个循环里好象只执行了一次,而不是一直在循环。2.在ap_mpm_run()里,有一个while(!restart_pending&&!shutdown_pending)。这个
2、循环每一秒就往返一次,一直执行,直到进程结束。如果是第一次启动,在这个循环里,会调用一个startup_children();在这里面又有一个循环调用make_child()产生初始数量的子进程。3.在上面的while里,perform_idle_server_maintenance(pconf)会每1秒执行一次,如果你kill-9一个子进程,这个函数就起作用,再重新调用make_child()生成一个子进程。4.如果执行httpd–kstop,那么ap_mpm_run()会返回错误,在main()就会跳出for(;;),进程退出。5.在make_c
3、hild()里,有一个fork()调用产生子进程,然后在子进程里调用child_main()进行子进程的初始化处理。linux-lncx:/home/apache/httpd-2.2.11/server#lsmain.cmain.clinux-lncx:/home/apache/httpd-2.2.11/server#intmain(intargc,constchar*constargv[]){charc;intconfigtestonly=0;constchar*confname=SERVER_CONFIG_FILE;constchar*def_s
4、erver_root=HTTPD_ROOT;constchar*temp_error_log=NULL;constchar*error;process_rec*process;server_rec*server_conf;apr_pool_t*pglobal;apr_pool_t*pconf;apr_pool_t*plog;/*Pooloflogstreams,reset_after_eachreadofconf*/apr_pool_t*ptemp;/*Poolfortemporaryconfigstuff,resetoften*/apr_pool_
5、t*pcommands;/*Poolfor-D,-Cand-cswitches*/apr_getopt_t*opt;apr_status_trv;module**mod;constchar*optarg;APR_OPTIONAL_FN_TYPE(ap_signal_server)*signal_server;AP_MONCONTROL(0);/*turnoffprofilingofstartup*/process=init_process(&argc,&argv);pglobal=process->pool;pconf=process->pconf;
6、ap_server_argv0=process->short_name;#ifAPR_CHARSET_EBCDICif(ap_init_ebcdic(pglobal)!=APR_SUCCESS){destroy_and_exit_process(process,1);}#endifapr_pool_create(&pcommands,pglobal);apr_pool_tag(pcommands,"pcommands");ap_server_pre_read_config=apr_array_make(pcommands,1,sizeof(char*
7、));ap_server_post_read_config=apr_array_make(pcommands,1,sizeof(char*));ap_server_config_defines=apr_array_make(pcommands,1,sizeof(char*));error=ap_setup_prelinked_modules(process);if(error){ap_log_error(APLOG_MARK,APLOG_STARTUP
8、APLOG_EMERG,0,NULL,"%s:%s",ap_server_argv0,error)
9、;destroy_and_exit_process(process,1);}ap_run_rewrite_a