php7中停止php-fpm服务的方法详解
在php生命周期的各个阶段,一些与服务相关的操作都是通过sapi接口实现。
各个服务器抽象层之间遵守着相同的约定,这里我们称之为sapi接口。
在php的源码中,当需要调用服务器相关信息时,全部通过sapi接口中对应的方法调用实现
php常见的四种运行模式
sapi(server application programming interface)服务器应用程序编程接口,即php与其他应用交互的接口.
每个sapi实现都是一个_sapi_module_struct结构体变量。
php脚本要执行有很多方式,通过web服务器,或者直接在命令行下,也可以嵌入在其他程序中。
sapi提供了一个和外部通信的接口,常见的sapi有:cgi、fast-cgi、cli、isapi apache模块的dll
- isapi模式 (eg apache : apache2handler mode ) 以web服务器的一个模块加载运行,其实就是将php的源码与webserver的代码一起编译,运行时是同一个进程,共享同一个地址空间. 例如 lamp中,php就是作为apache的一个模块运行的.apache是多线程调用php模块的.(same as iis)
- cgi模式 fork-and-execute webserver将动态请求转发到cgi程序(以php为例子),就相当于fork一个子进程,然后exec(php process),用cgi程序来解释请求内容,最后将子进程的output返回.此时webserver与php进程的地址空间是独立的.此时的php是作为一个独立的程序运行.
- fastcgi模式 这种形式是cgi的加强版本,cgi是单进程,多线程的运行方式,程序执行完成之后就会销毁,所以每次都需要加载配置和环境变量(创建-执行)。
而fastcgi则不同,fastcgi 是一个常驻 (long-live) 型的 cgi,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次。 - cli command line interface
cli
php-fpm
php 5.3.3 以后的php-fpm不再支持php-fpm (start|stop|reload)等命令,需要使用信号控制.php-fpm master进程可以理解以下信号
- kill -usr1 "php-fpm master pid" 重新打开日志文件. 执行完毕后 你会发现php-fpm master/worker进程id not change
- kill -usr2 "php-fpm master pid" 平滑重载所有php-fpm进程,执行完毕后你会发现php-fpm master/worker进程id have changed.
- kill -kill/-9 php-fpm-master.pid , 强制杀死master进程,该信号不允许中断/阻塞,此时master进程无法通知回收worker进程,所以此时worker进程仍然监听port,仍然可以正常处理http请求.
- kill -int/-quit/-term master pid , stop php-fpm service 信号被当前进程树接收到.也就是说,不仅当前进程会收到信号,它的子进程也会收到.
- kill master pid 发送sigterm信号到进程 信号可能会被阻塞,master可以回收worker进程.
example.
so we should use sudo kill -int master.pid to kill php-fpm service.
nginx的master-worker机制与fpm大体相同.但是有一个问题需要注意,使用systemctl启动起来的master被kill以后,worker也会死掉.
正常启动nginx,kill掉master
使用systemctl启动的master被kill掉以后,worker也会杀掉
rective run
apache prefork
总结
到此这篇关于php7中停止php-fpm服务的文章就介绍到这了,更多相关php7停止php-fpm服务内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: 古代皇帝翻牌子如果妃子来例假 古人又是怎么解决这个问题的
下一篇: 深入理解python多线程编程