php-cgi.exe在windows+nginx平臺下常常自動退出,網上搜到的大部分解決方法都是相似上面的批處理(代碼以下)文件臨時解決一下,但若是用戶在網站登陸的話,用戶就會忽然掛掉。php
@echo off :main set jinchengshuliang=0 set jinchengshuliangxiaxian=2 for /f %%i in ('tasklist /nh^|findstr /i /s /c:"php-cgi.exe"') do set /a jinchengshuliang+=1 if %jinchengshuliang% lss %jinchengshuliangxiaxian% ( goto youwenti ) else ( goto meiwenti ) :youwenti echo 進程丟失,如今添加5個進程 RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9000 -c php\php.ini RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9000 -c php\php.ini RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9000 -c php\php.ini RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9000 -c php\php.ini RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9000 -c php\php.ini ping 127.1 -n 8 goto main :meiwenti echo 正常運行中! ping 127.1 -n 8 goto main
最好的解決辦法是用windows下的php-cgi進程管理器,該進程管理器須要用到pthreadGC2.dll。源碼和編譯文件見本文下載地址。經測試,支持Win32和Linux-x86平臺。對於用php的人,有了這個東西來維護必定數量的進程,就能制服常常崩潰退出的php-cgi啦!linux
下載地址:http://download.csdn.net/download/mlm588/10226527nginx
如下是xxfpm進程管理器的操做參數:windows
Usage: xxfpm path [-n number] [-i ip] [-p port] Manage FastCGI processes. -n, --number number of processes to keep -i, --ip ip address to bind -p, --port port to bind, default is 8000 -u, --user start processes using specified linux user -g, --group start processes using specified linux group -r, --root change root direcotry for the processes -h, --help output usage information and exit -v, --version output version information and exit
第一個寫得比較標準的終端應用程序,我是看了cygwin的裏的一些源代碼,而後學會了如何使用getopt,算是寫得比較標準的,可是代碼也不短。bash
使用例子:測試
xxfpm z:/php5/php-cgi.exe -n 5 -p 8080
有人問,如何給程序加入參數?這個不難,使用雙引號便可,路徑要用"/"而不用"\"。例如要指定php.ini的路徑,能夠用下面例子:網站
xxfpm "z:/php5/php-cgi.exe -c z:/php5/php.ini" -n 5 -i 127.0.0.1 -p 8080
維護進程原理:.net
Windows上使用CreateProcess建立進程,使用Wait For Single Object等待進程結束;Linux上使用fork和execl建立進程,使用waitpid等待進程結束。Linux的版本多了在建立子進程的時候能夠設置進程限制,可以以受限用戶方式來運行。code
當進程管理器被關閉的時候,它所建立的全部子進程也必須被關閉。Windows上使用JobObject這個東西來把子進程與管理器的進程產生關聯,感謝iceboy提供的資料!Linux上經過捕捉關閉信號,而後給全部子進程發送SIGTERM來結束子進程。詳見附件源代碼。orm
啓動php進程:
RunHiddenConsole D:\php5\xxfpm\bin\xxfpm.exe "d:/php5/php-cgi.exe -c d:/php5/php.ini" -n 5 -i 127.0.0.1 -p 9000
中止php進程:
echo Stopping PHP FastCGI... taskkill /F /IM php-cgi.exe > nul taskkill /F /IM xxfpm.exe > nul
RunHiddenConsole 下載地址:http://download.csdn.net/download/mlm588/10226537