php7中停止php-fpm服务的方法详解

admin3年前PHP教程34

在PHP生命周期的各个阶段,一些与服务相关的操作都是通过SAPI接口实现。

各个服务器抽象层之间遵守着相同的约定,这里我们称之为SAPI接口。

在PHP的源码中,当需要调用服务器相关信息时,全部通过SAPI接口中对应的方法调用实现


php-fpm + nginx
php + terminal
...

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_module_startup
php_request_startup
php_execute_script
php_request_shutdown
php_module_shutdown

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 changekill -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.


[sujianhui@dev529 ~]$>ps aux | grep php-fpm
root     17000  0.0  0.0 243220  7208 ?        Ss   17:00   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
sujianh+ 17001  0.0  0.0 245304  7072 ?        S    17:00   0:00 php-fpm: pool www
sujianh+ 17002  0.0  0.0 245304  7072 ?        S    17:00   0:00 php-fpm: pool www
sujianh+ 17069  0.0  0.0 112816   976 pts/3    S+   17:01   0:00 grep --color=auto php-fpm
 
[sujianhui@dev529 ~]$>sudo kill -USR1 17000
[sujianhui@dev529 ~]$>ps aux | grep php-fpm
root     17000  0.0  0.0 243220  7208 ?        Ss   17:00   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
sujianh+ 17001  0.0  0.0 245304  7072 ?        S    17:00   0:00 php-fpm: pool www
sujianh+ 17002  0.0  0.0 245304  7072 ?        S    17:00   0:00 php-fpm: pool www
sujianh+ 17105  0.0  0.0 112816   972 pts/3    S+   17:01   0:00 grep --color=auto php-fpm
 
 
[sujianhui@dev529 ~]$>sudo kill -USR2 17000
[sujianhui@dev529 ~]$>ps aux | grep php-fpm
root     17122  0.0  0.0 243220  7212 ?        Ss   17:01   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
sujianh+ 17123  0.0  0.0 245304  7072 ?        S    17:01   0:00 php-fpm: pool www
sujianh+ 17124  0.0  0.0 245304  7072 ?        S    17:01   0:00 php-fpm: pool www
sujianh+ 17126  0.0  0.0 112816   976 pts/3    S+   17:01   0:00 grep --color=auto php-fpm
 
[sujianhui@dev529 ~]$>pstree 17122 -a
php-fpm
  ├─php-fpm         
  └─php-fpm         
[sujianhui@dev529 ~]$>sudo kill -INT 17122
[sujianhui@dev529 ~]$>ps aux | grep php-fpm
sujianh+ 17229  0.0  0.0 112816   976 pts/3    S+   17:03   0:00 grep --color=auto php-fpm

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


[sujianhui@dev0529 sbin]$>which nginx
/usr/sbin/nginx
[sujianhui@dev0529 sbin]$>sudo nginx
[sujianhui@dev0529 sbin]$>ps aux | grep nginx
root      4562  0.0  0.0  46608  1084 ?        Ss   21:46   0:00 nginx: master process nginx
sujianh+  4563  0.0  0.0  49128  2088 ?        S    21:46   0:00 nginx: worker process
sujianh+  4578  0.0  0.0 112812   972 pts/0    S+   21:46   0:00 grep --color=auto nginx
 
[sujianhui@dev0529 sbin]$>sudo kill -9 4562
[sujianhui@dev0529 sbin]$>ps aux | grep nginx
sujianh+  4563  0.0  0.0  49128  2088 ?        S    21:46   0:00 nginx: worker process
sujianh+  4612  0.0  0.0 112812   972 pts/0    S+   21:46   0:00 grep --color=auto nginx
[sujianhui@dev0529 sbin]$>kill -9 4563
[sujianhui@dev0529 sbin]$>ps aux | grep nginx
sujianh+  4638  0.0  0.0 112812   972 pts/0    S+   21:47   0:00 grep --color=auto nginx

使用systemctl启动的master被kill掉以后,worker也会杀掉


[sujianhui@dev0529 sbin]$>systemctl start nginx
[sujianhui@dev0529 sbin]$>ps aux | grep nginx
root      4678  0.0  0.0  46608  1072 ?        Ss   21:47   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
sujianh+  4679  0.0  0.0  49124  2080 ?        S    21:47   0:00 nginx: worker process
sujianh+  4702  0.0  0.0 112812   972 pts/0    S+   21:47   0:00 grep --color=auto nginx
[sujianhui@dev0529 sbin]$>sudo kill -9 4678
[sujianhui@dev0529 sbin]$>ps aux | grep nginx
sujianh+  4732  0.0  0.0 112812   972 pts/0    S+   21:47   0:00 grep --color=auto nginx

rective run


[sujianhui@dev529 ~]$>kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX   
 
[sujianhui@dev529 ~]$>sudo nginx
[sudo] password for sujianhui:
[sujianhui@dev529 ~]$>ps aux | grep nginx
root      3628  0.0  0.0  46600  1052 ?        Ss   09:49   0:00 nginx: master process nginx
sujianh+  3629  0.0  0.0  49096  2056 ?        S    09:49   0:00 nginx: worker process
sujianh+  3637  0.0  0.0 112812   972 pts/0    S+   09:49   0:00 grep --color=auto nginx
 
[sujianhui@dev529 ~]$>sudo kill -SIGTERM 3628
[sujianhui@dev529 ~]$>ps aux | grep nginx
sujianh+  3744  0.0  0.0 112812   972 pts/0    S+   09:50   0:00 grep --color=auto nginx
 
[sujianhui@dev529 ~]$>sudo nginx
[sujianhui@dev529 ~]$>ps aux | grep nginx
root      3766  0.0  0.0  46600  1052 ?        Ss   09:51   0:00 nginx: master process nginx
sujianh+  3767  0.0  0.0  49096  2056 ?        S    09:51   0:00 nginx: worker process
sujianh+  3775  0.0  0.0 112812   972 pts/0    S+   09:51   0:00 grep --color=auto nginx
[sujianhui@dev529 ~]$>sudo kill -9 3766
[sujianhui@dev529 ~]$>ps aux | grep nginx
sujianh+  3767  0.0  0.0  49096  2056 ?        S    09:51   0:00 nginx: worker process
sujianh+  3799  0.0  0.0 112812   972 pts/0    S+   09:51   0:00 grep --color=auto nginx

apache prefork

总结

到此这篇关于php7中停止php-fpm服务的文章就介绍到这了,更多相关php7停止php-fpm服务内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

PHPStorm+Xdebug进行emote Debug时无法进入断点问题排查

最近一直在研究xdebug的用法,主要是因为xdebug对php的开发效率提升确实很大,而却能帮我们解决很多问题。所以这里就总结下我在配置phpstorm+xdebug环境中遇到的坑,给遇到进不去断点...

详解Laravel制作API接口

需要注意的是:API有它的具体用途,我们应该清楚它是干啥的。访问API的时候应该输入什么。访问过API过后应该得到什么。在开始设计API时,我们应该注意这8点。后续的开发计划就围绕着这个进行了。1.R...

GPU服务器可用于深度学习吗韩国gpu服务器哪个品牌好

GPU服务器可用于深度学习吗?什么是深度学习?在人工智能领域,机器学习是其中的一个技术流派,通过从已知样本中提炼规律来获得判断未知样本的智能;深度学习则是机器学习的一种,它所学习出来的模型是深度神经网...

PHP对接抖音开发平台接口的详细教程

一、说明抖音开放平台-开发指南二、代码<?phpnamespace app\common\libs;use app\common\exception\BaseException;/*** Cla...

5个提升高防服务器安全性的小技巧?使用国内电信100G高防服务器需要注意的有哪些?

互联网中网络环境更为复杂出现多种多样的网络流量攻击,而且出现频率也越来越高。租赁高防服务器的用户同样也需要面临网络安全方面的问题,要关注高防服务器的软硬件安全性的升级,以下分享5个升级高防服务器安全性...

浅谈并发处理PHP进程间通信之外部介质

目录进程间通信文件flock代码实现mysqlselect for update代码实现redisincrSETNX代码实现优化总结进程间通信进程间通信,指至少两个进程或线程间传送数据或信号的一些技术...