php-cgi在linux中有fpm管理,Apache不是采用cgi这种模式,于是乎就出现了,在windows下,采用nginx时,开启的php-cgi监听非常不稳定,经常奔溃关闭。
xxfpm一个小巧的FastCGI进程管理器xxfpm可以很好的解决这个问题,对于用php的人,有了这个东西来维护一定数量的进程,就能制服经常崩溃退出的php-cgi。
Usage:xxfpmpath[-nnumber][-iip][-pport]ManageFastCGIprocesses.-n,–numbernumberofprocessestokeep-i,–ipipaddsstobind-p,–portporttobind,defaultis-u,–userstartprocessesusingspecifiedlinuxuser-g,–groupstartprocessesusingspecifiedlinuxgroup-r,–rootchangerootdicotryfortheprocesses-h,–helpoutputusageinformationandexit-v,–versionoutputversioninformationandexit
使用示例xxfpmz:/php5/php-cgi.exe-n5-p
有人问,如何给程序加入参数?这个不难,使用双引号即可,路径要用”/”而不用”\”。例如要指定php.ini的路径,可以用下面例子:
xxfpm“z:/php5/php-cgi.exe-cz:/php5/php.ini”-n5-i17.0.0.1-p
如何维护进程Windows上使用CateProcess创建进程,使用WaitForSingleObject等待进程结束;Linux上使用fork和execl创建进程,使用waitpid等待进程结束。Linux的版本多了在创建子进程的时候可以设置进程限制,能够以受限用户方式来运行。
当进程管理器被关闭的时候,它所创建的所有子进程也必须被关闭。Windows上使用JobObject这个东西来把子进程与管理器的进程产生关联,感谢iceboy提供的资料!Linux上通过捕捉关闭信号,然后给所有子进程发送SIGTERM来结束子进程。详见源代码!
缺少pthadgc.dll下载后运行xxfpm.exe,如果出现报错缺少pthadgc.dll,将压缩包里面的pthadgc.dll文件,复制到C:\Windows\System目录,然后命令行运行下面命令注册dll:
gsvrpthadgc.dll
Nginx配置实现启动脚本需要将下面的目录地址替换成你的路径
#start.batSETphp_home=E:\wnmp\php\SETnginx_home=E:\wnmp\nginx\echoStartingPHPFastCGI...RunHiddenConsoleE:/wnmp/xxfpm/bin/xxfpm.exe"E:/wnmp/php/php-cgi.exe-cE:/wnmp/php/php.ini"-n10-i17.0.0.1-pechoStartingnginx...RunHiddenConsole%nginx_home%nginx.exe-p%nginx_home%
停止脚本#stop.bat
echooffechoStoppingnginx...taskkill/F/IMnginx.exenulechoStoppingPHPFastCGI...taskkill/F/IMxxfpm.exenulexit相关链接GitHub