xxfpm: 写了一个小巧的FastCGI进程管理器
经测试,支持Win32和Linux-x86平台。对于用php的人,有了这个东西来维护一定数量的进程,就能制服经常崩溃退出的php-cgi啦!!!
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,算是写得比较标准的,但是代码也不短。
使用例子:
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
如何维护进程:
Windows上使用CreateProcess创建进程,使用WaitForSingleObject等待进程结束;Linux上使用fork和execl创建进程,使用waitpid等待进程结束。Linux的版本多了在创建子进程的时候可以设置进程限制,能够以受限用户方式来运行。
当进程管理器被关闭的时候,它所创建的所有子进程也必须被关闭。Windows上使用JobObject这个东西来把子进程与管理器的进程产生关联,感谢iceboy提供的资料!Linux上通过捕捉关闭信号,然后给所有子进程发送SIGTERM来结束子进程。详见源代码!!!
点击下载:

2011年02月01日 20:29
sofa
2011年02月01日 20:32
不错
2011年02月02日 13:56
不错!
2011年02月02日 20:59
虾的coding能力就是强
2011年02月03日 18:19
跟你学习了:-)
2011年04月26日 23:00
楼主怎么用吖!不懂,用nginx配置php-cgi.exe总自动退出
2011年04月27日 01:10
是个命令行程序来的,参照本文提及的例子呀!
2011年02月03日 17:28
用lnmp偶尔502用这个能解决不?
2011年02月03日 18:00
是什么引起502错误的呢?代理服务器?
2011年02月03日 18:17
不是代理服务器,lnmp。org的套件,502后重启下php就好了,不知道什么原因。。。
2011年02月03日 18:19
难道是所有php-cgi进程崩溃退出后,没有重新打开?
你可以试试xxfpm维护一下php-cgi的进程呀,用参数设置一下ip和端口就行了。
2011年02月03日 21:11
ok,谢谢,有空试试
2011年02月05日 16:28
怎么不把设置端口跟ip放出来设置呢,放里面每次修改还要编译很麻烦的
2011年02月05日 21:06
有参数设置的嘛!!!
xxfpm z:/php5/php-cgi.exe -n 5 -i 127.0.0.1 -p 8080
2011年02月05日 21:08
不好意思,呵呵,之前没有看见,后来仔细看-h 看见了,
2011年02月07日 14:26
博主辛苦了,小程序很有用呢~
2011年04月04日 19:59
很不错的软件,找了很久了,谢谢博主。
2011年07月16日 12:16
博主您好,我现在也是遇到这个问题,但我不太懂技术,我想知道您这个如何使用呢? 大家看了别笑。。。。
我在cmd里面输入命令行,老是弄不对,能提点一下到我邮箱么,谢谢!
2011年07月16日 17:11
文章里不是写了使用说明吗???
按着里面的例子做。
2011年07月16日 17:12
还是不行的话,代码能不能看懂呢?也不是很长,就是注释少了点唉。
2011年07月16日 17:55
最后弄明白了用法,现在已经用上。感谢
2011年10月26日 18:25
用上,非常好,多谢。。。。终于解决了自动退出问题。
2011年11月06日 15:06
谢谢博主!想请教一个问题,xxfpm这个FastCGI进程管理器是否能够支持自动新增php-cgi.exe线程,以适应请求数?
2011年11月06日 15:11
你好,不会的,只能维持一定数量的进程。你可以修改代码加入这一个新功能的。
2011年11月18日 14:50
就我目前测试,该程序不支持Windows 7 64Bit环境,希望能够改进,谢谢
2011年11月18日 15:01
要支持windows各种版本,是很有难度的,因为其中用到了win32 api,各个版本都有差异。
唉,大家还是转投Linux吧……
2011年11月18日 15:02
太遗憾了。。。
2012年02月27日 09:23
可以支持 win7 64位啊, 我现在就是, 已经使用中。
2011年12月10日 09:37
问一下 能否隐藏cmd窗口 ,一直开着很烦。有没有隐藏的命令???望博主赐教
2011年12月10日 15:03
好像写windows服务不是一般的麻烦。。。所以还没时间帮的上忙咯!
2011年12月20日 16:35
请问一下,能否限制php-cgi的进程数量呢?
2011年12月20日 18:35
没明白你的意思,这个软件是固定进程数量的。通过-n参数来指定。
2011年12月21日 10:23
呵呵,就是说能不能使php-cgi.exe进程不超过某一个数量。
我现在遇到的问题是php-cgi正常情况10个左右,但是会突发性瞬间出现50~80个php-cgi进程。
我研究如何把这个进程限制在一个数值下找到这里的
2011年12月20日 20:44
很好,已经用于生产环境了,win2003下Nginx和xxfpm都以服务的方式运行了。
观察几天看有没有什么问题。
谢谢小虾
2011年12月20日 21:22
嗯,希望看到你的测试结果,方便完善这个程序
2011年12月22日 16:02
请问能不能使php-cgi.exe进程不超过某一个数量。
我现在遇到的问题是php-cgi正常情况10个左右,但是会突发性瞬间出现50~80个php-cgi进程。
我研究如何把这个进程限制在一个数值下找到这里的
2011年12月22日 16:20
缺少pthreadgc2.dll
2011年12月23日 12:19
Widnows缺少posix thread库在这里下,http://sourceware.org/pthreads-win32/
2012年03月27日 13:50
为什么要使用 /bin/sh 去执行 cgi 程序呢?
2012年03月29日 16:15
哈,这个是fcgi,跟cgi不一样的。
话说,我代码里用/bin/sh执行别的程序了么?
2012年03月29日 16:32
是啊,使用 scgi or fcgi 转 cgi 的方式,由 scgi to cgi 中间件通过子进程去执行 php-cgi 解释执行 php 脚本,效率应该是差不多的吧。