php7中停止php-fpm服务的方法详解
发布:smiling 来源: PHP粉丝网 添加日期:2022-04-21 18:53:27 浏览: 评论:0
在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 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
Tags: php7停止php-fpm
- 上一篇:PHP对接美团大众点评团购券(门票)的开发步骤
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)