Xiaoxia[PG] Yesterday is history, tomorrow is mistery, today is a gift!

1二/1141

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来结束子进程。详见源代码!!!

点击下载:

xxfpm源代码及Win32、Linux32可执行文件

喜欢这个文章吗?

考虑订阅我们的RSS Feed吧!

评论 (41) 引用 (2)
  1. 虾的coding能力就是强

  2. 用lnmp偶尔502用这个能解决不?

  3. 怎么不把设置端口跟ip放出来设置呢,放里面每次修改还要编译很麻烦的

  4. 博主辛苦了,小程序很有用呢~

  5. 很不错的软件,找了很久了,谢谢博主。

  6. 博主您好,我现在也是遇到这个问题,但我不太懂技术,我想知道您这个如何使用呢? 大家看了别笑。。。。

    我在cmd里面输入命令行,老是弄不对,能提点一下到我邮箱么,谢谢!

  7. 用上,非常好,多谢。。。。终于解决了自动退出问题。

  8. 谢谢博主!想请教一个问题,xxfpm这个FastCGI进程管理器是否能够支持自动新增php-cgi.exe线程,以适应请求数?

  9. 就我目前测试,该程序不支持Windows 7 64Bit环境,希望能够改进,谢谢

  10. 问一下 能否隐藏cmd窗口 ,一直开着很烦。有没有隐藏的命令???望博主赐教

  11. 请问一下,能否限制php-cgi的进程数量呢?

    • 没明白你的意思,这个软件是固定进程数量的。通过-n参数来指定。

      • 呵呵,就是说能不能使php-cgi.exe进程不超过某一个数量。
        我现在遇到的问题是php-cgi正常情况10个左右,但是会突发性瞬间出现50~80个php-cgi进程。
        我研究如何把这个进程限制在一个数值下找到这里的

  12. 很好,已经用于生产环境了,win2003下Nginx和xxfpm都以服务的方式运行了。
    观察几天看有没有什么问题。
    谢谢小虾

  13. 请问能不能使php-cgi.exe进程不超过某一个数量。
    我现在遇到的问题是php-cgi正常情况10个左右,但是会突发性瞬间出现50~80个php-cgi进程。
    我研究如何把这个进程限制在一个数值下找到这里的

  14. 为什么要使用 /bin/sh 去执行 cgi 程序呢?

    • 哈,这个是fcgi,跟cgi不一样的。
      话说,我代码里用/bin/sh执行别的程序了么?

      • 是啊,使用 scgi or fcgi 转 cgi 的方式,由 scgi to cgi 中间件通过子进程去执行 php-cgi 解释执行 php 脚本,效率应该是差不多的吧。


Leave a comment

(required)