本文在php-7.2.0版本下进行分析。主要介绍fpm目录文件,并介绍fpm入口文件。
1、fpm目录
fpm位于php_src/sapi
目录下
1 | . |
linux管理进程有两种常见方式,centOS7以下,基本采用init.d来管理操作系统的启动,而centOS7开始使用systemd来管理系统的启动,关于这两种启动方式,超出本文所讲述的范围,这里只给出相关链接。systemd,阮一峰老师的一篇文章,讲解的非常浅显易懂,Systemd入门。init这里没有找到比较好的,给出维基百科的解释。https://zh.wikipedia.org/wiki/Init
之所以要提及init和systemd,主要是在我们的fpm目录下,为这两个程序提供了相应的管理配置。具体配置这里不展开详述了,感兴趣的可以了解相关资料。
fpm目录
存放fpm源码的目录,fpm采用c语言编写,每个文件都是成对出现的,.c
和.h
文件,其详细结构如下:
1 | php-7.2.0/sapi/fpm |
fpm入口程序
FPM(FastCGI Process Manager)是PHP FastCGI运行模式的一个进程管理器,从它的定义可以看出,FPM的核心功能是进程管理,那么它用来管理什么进程呢?接下来我们将从入口程序开始,一点一点揭开其神秘面纱。分析一个程序,找准入口是关键,找到入口后根据主脉络往下捋即可。按照这样的指导思想,那我们就开始吧。
php_src/sapi/fpm/fpm/fpm_main.c:fpm入口程序,找到main入口函数,我们先来看下fpm启动执行的主要流程:
1 | int main(int argc, char *argv[]) |
总结一些入口文件干的事情:
- 初始化数据结构
- 解析命令行参数
- 初始化fpm_init
- 执行fpm_run
- 启动监听端口并处理请求(此处主进程是不会走到的)
下面一篇文章将会讲解fpm的进程是如何管理的