时间:2022-01-11 10:30:00 | 栏目:PHP代码 | 点击:次
在PHP生命周期的各个阶段,一些与服务相关的操作都是通过SAPI接口实现。
各个服务器抽象层之间遵守着相同的约定,这里我们称之为SAPI接口。
在PHP的源码中,当需要调用服务器相关信息时,全部通过SAPI接口中对应的方法调用实现
php-fpm + nginx php + terminal ...
SAPI(Server Application Programming Interface)服务器应用程序编程接口,即PHP与其他应用交互的接口.
每个SAPI实现都是一个_sapi_module_struct结构体变量。
PHP脚本要执行有很多方式,通过Web服务器,或者直接在命令行下,也可以嵌入在其他程序中。
SAPI提供了一个和外部通信的接口,常见的SAPI有:cgi、fast-cgi、cli、isapi apache模块的DLL
php_module_startup php_request_startup php_execute_script php_request_shutdown php_module_shutdown
php 5.3.3 以后的php-fpm不再支持php-fpm (start|stop|reload)等命令,需要使用信号控制.php-fpm master进程可以理解以下信号
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