广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php7中停止php-fpm服务的方法详解
  • 575
分享到

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

2024-04-02 19:04:59 575人浏览 八月长安
摘要

在PHP生命周期的各个阶段,一些与服务相关的操作都是通过Sapi接口实现。 各个服务器抽象层之间遵守着相同的约定,这里我们称之为SAPI接口。 在php的源码中,当需要调用服务器相关

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

  1. ISAPI模式 (eg Apache : apache2handler mode ) 以web服务器的一个模块加载运行,其实就是将PHP的源码与webServer的代码一起编译,运行时是同一个进程,共享同一个地址空间. 例如 LAMP中,PHP就是作为Apache的一个模块运行的.Apache是多线程调用php模块的.(same as IIS)
  2. CGI模式 fork-and-execute webServer将动态请求转发到CGI程序(以php为例子),就相当于fork一个子进程,然后exec(php process),用CGI程序来解释请求内容,最后将子进程的output返回.此时webServer与php进程的地址空间是独立的.此时的php是作为一个独立的程序运行.
  3. FastCGI模式 这种形式是CGI的加强版本,CGI是单进程,多线程的运行方式,程序执行完成之后就会销毁,所以每次都需要加载配置和环境变量(创建-执行)。
    而FastCGI则不同,FastCGI 是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次。
  4. 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 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.


[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服务内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: php7中停止php-fpm服务的方法详解

本文链接: https://www.lsjlt.com/news/123358.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php7中停止php-fpm服务的方法详解
    在PHP生命周期的各个阶段,一些与服务相关的操作都是通过SAPI接口实现。 各个服务器抽象层之间遵守着相同的约定,这里我们称之为SAPI接口。 在PHP的源码中,当需要调用服务器相关...
    99+
    2022-11-12
  • PHP7中php.ini、php-fpm和www.conf的配置方法
    这篇文章给大家分享的是有关PHP7中php.ini、php-fpm和www.conf的配置方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。因此,这篇文章主要对这三个PHP配置文件的进行简单说明,具体的配置过程见...
    99+
    2023-06-14
  • php cli停止工作的解决方法
    小编给大家分享一下php cli停止工作的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php cli停止工作的解决办法:1、打开php.ini配置文件;...
    99+
    2023-06-25
  • 详解Java停止线程的四种方法
    一、线程停止基础知识 interrupted(): 测试当前线程是否已经中断。该方法为静态方法,调用后会返回boolean值。不过调用之后会改变线程的状态,如果是中断状态...
    99+
    2022-11-12
  • SQL SERVER服务停止的处理方法
    当SQL Server服务停止时,可以尝试以下方法来解决问题:1. 检查SQL Server服务是否启动。打开“服务”管理器,找到S...
    99+
    2023-09-05
    SQL SERVER
  • Oracle停止数据泵导入数据的方法详解
    目录前言一、操作二、总结前言 这篇博客所描述的是,停止数据的导入只能时停止后面的数据的导入并不会把已经到入的数据进行回滚和删除。 一、操作 使用数据泵 impdp 开始导入数据后,突...
    99+
    2022-11-13
  • mac中php-fpm报错的解决方法
    小编给大家分享一下mac中php-fpm报错的解决方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!mac php-fpm报错的解决办法:1、配置“php-fpm.conf”文件;2、修改“php-fpm.conf err...
    99+
    2023-06-14
  • 详解Android 视频播放时停止后台运行的方法
    详解Android 视频播放时停止后台运行的方法在项目中,遇到了视频播放,可是后台播放的音乐也同时播放,我们要的效果肯定是视频播放的时候,音乐暂停,视频播放完了我们就继续播放音乐,于是就找到了这个方法。 @TargetApi(Build.V...
    99+
    2023-05-31
    android 视频播放 后台运行
  • linux 下MySQL服务器的启动与停止方法
    本篇内容主要讲解“linux 下MySQL服务器的启动与停止方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux 下MySQL服务器的启动与停止方法”吧!一、以非特权用户运行MySQL服...
    99+
    2023-06-10
  • 亚马逊服务器停止续费的原因及解决方法
    1. 为什么亚马逊服务器停止续费? 亚马逊服务器停止续费可能有多种原因。以下是一些可能的原因: 1.1 账户余额不足 亚马逊服务器使用预付费模式,即需要提前充值账户余额来支付服务器费用。如果账户余额不足,服务器将无法继续使用。 1.2 信...
    99+
    2023-10-27
    亚马逊 解决方法 续费
  • SQL SERVER服务启动后又停止了的完美解决方法
    如果SQL Server服务启动后又停止了,可能有以下几个常见的原因:1. 硬件资源不足:检查服务器的硬件资源(CPU、内存等)是否...
    99+
    2023-09-16
    sqlserver
  • MySQL服务正在启动或停止中或服务无法启动【解决方案】
    具体的教程如下: 1. 首先以管理员身份打开命令行窗口,注意是管理员身份,不然无权限访问。 2. 输入命令“tasklist| findstr "mysql"”,用于查找mysql的残留进程。果不其然,确实存在mysql的残留进程,难怪...
    99+
    2023-08-31
    mysql 数据库 Powered by 金山文档
  • Docker 无法停止或删除容器服务问题的解决方案
    前言 今天有开发同学给我反馈说有一个容器服务无法 stop、rm(docker rm -f)和 kill 等操作,也就是说这个容器服务无法终止~ 操作步骤 (1)执行删除命令无法删除...
    99+
    2022-11-12
  • Java中终止线程的方法详解
    Java中终止线程的方式主要有三种:使用stop()方法,已被弃用。原因是:stop()是立即终止,会导致一些数据被到处理一部分就会被终止,而用户并不知道哪些数据被处理,哪些没有被处理,产生了不完整的“残疾”数据,不符合完整性,所以被废弃。...
    99+
    2023-05-31
    java 终止线程 ava
  • Python中防止sql注入的方法详解
    前言 大家应该都知道现在web漏洞之首莫过于sql了,不管使用哪种语言进行web后端开发,只要使用了关系型数据库,可能都会遇到sql注入攻击问题。那么在Python web开发的过程中sql注入是怎么出现的...
    99+
    2022-06-04
    详解 方法 Python
  • 阿里云服务器强行停止原因、解决方法及预防措施
    阿里云服务器是一款基于云计算技术的服务器服务,用户可以通过阿里云服务器来运行自己的应用程序和服务。然而,有时候,由于各种原因,阿里云服务器可能会被强行停止。这篇文章将详细介绍阿里云服务器强行停止的原因、解决方法以及预防措施。 一、阿里云服务...
    99+
    2023-12-16
    预防措施 阿里 解决方法
  • 在Vista系统中 Windows 主进程 (Rundll32) 已停止工作的解决方法
    在Vista系统中只要打开某文件夹,就出现“Windows 主进程 (Rundll32) 已停止工作” 原因:问题出现在vista的缩略图显示上 解决方法:只要选择系统从不显示缩略图就可以解决问题...
    99+
    2023-05-25
    Rundll32 停止工作 方法 解决 工作 Vista
  • java调用远程服务器的shell脚本以及停止的方法实现
    最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手。考虑再三,有两种实现方式: 方案一:脚本所在服务器安装一个客户端,也就是自己写的一个...
    99+
    2022-11-11
  • linux环境下编写shell脚本实现启动停止tomcat服务的方法
    第一步:以管理员的身份进入控制台,在指定目录下新建一个shell脚本,我这里命名为tomcat.sh 第二步:编写shell脚本 #!/bin/bash tomcat_home=/usr/tomcat/apac...
    99+
    2022-06-04
    linux shell脚本编写 linux tomcat环境
  • 阿里云服务器ecs转移停止运行了原因、解决方法及注意事项
    本文将详细解释阿里云服务器ecs停止运行的原因,提供解决方法,并给出一些在操作过程中需要注意的事项。 阿里云服务器ecs停止运行了,可能是由于多种原因造成的。以下是一些可能的原因和解决方法:原因一:系统资源不足 如果服务器内存、CPU或...
    99+
    2023-11-20
    阿里 解决方法 注意事项
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作