php-fpm执行流程源码浅析

WBOY
Release: 2016-06-23 13:38:53
Original
1185 people have browsed it

作者:zhanhailiang 日期:2015-03-09
Copy after login

sapi\fpm\fpm\fpm_main.c:@main;

  1. fcgi_init()->fcgi_setup_signals(); 设置信号处理方法;

    sigaction(SIGUSR1, &new_sa, NULL);
    sigaction(SIGTERM, &new_sa, NULL);
    sigaction(SIGPIPE, NULL, &old_sa);

  2. sapi_startup(&cgi_sapi_module);
    ->sapi_globals_ctor(&sapi_globals); 初始化全局变量; 
    ->reentrancy_startup();

  3. fcgi_fd = fpm_run(&max_requests); 进程初始化,调用fork()创建进程

  4. fcgi_init_request(&request, fcgi_fd); 请求初始化;

  5. while (fcgi_accept_request(&request) >= 0) {
    5.1. init_request_info; 请求初始化; SG(request_info), SG(sapi_headers)
    5.2. fpm_request_info(); 
    5.3. php_request_startup(TSRMLS_C); 
    -> php_start_sapi(); 请求全局变量初始化; 
    -> sapi_activate(TSRMLS_C); 请求HTTP头信息初始化; 
    -> php_hash_environment(TSRMLS_C); 请求环境变量初始倾听; 如$_GET,$_POST,$_ENV,$_SERVER,$_COOKIE,$_FILES就是在这步实始化; $_REQUEST根据jit_initialization判断是否需要实时初始化; 
    5.4. fpm_status_handle_request(TSRMLS_C); 
    5.5. php_fopen_primary_script(&file_handle TSRMLS_CC); 打开脚本; 
    5.5. fpm_request_executing();
    5.7. php_execute_script(&file_handle TSRMLS_CC); 执行脚本; 
    5.8. fpm_request_end(TSRMLS_C); 
    5.9. php_request_shutdown((void *) 0); 请求结束, 释放请求生命周期中申请的资源;

  6. fcgi_shutdown(); 释放申请的持久化资源

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!