spawn-fcgi是lighttpd附带的一个进程管理程序,以前习惯用lighttpd的时候,经常用它来部署php-cgi. Nginx出现之后,再也不用了

spawn-fcgi的代码很少,全部才630行,用c语言编写,最近一次提交是5年前

代码主页:https://github.com/lighttpd/spawn-fcgi

spawn-fcgi代码分析如下

  1. spawn-fcgi 首先create socket,bind,listen 3步创建服务器socket,(把这个socket叫做 fcgi_fd)
  2. 用dup2,把fcgi_fd 交换给 FCGI_LISTENSOCK_FILENO (FCGI_LISTENSOCK_FILENO数值上等于0,这是fastcgi协议当中指定用来listen的socket id)
  3. 执行execl ,replaces the current process image with a new process image. process image 进程在运行空间的代码段

很显然,spawn-fcgi也是 pre-fork 模型,只是用了上古C语言编写,充满了N多 unix下暗黑编程技巧,难怪5,6年没有人参与

spawn-fcgi功能很单一

  • 只管fork进程,子进程挂了,主进程仅仅log记录一次,根本不会重新fork。在2009年一段时间内,我曾经用spawn-fcgi部署php-cgi,当跑一段时间就会全挂掉,只能用crontab定时重启spawn-fcgi
  • 不负责子进程中的网络IO,把socket放到指定位置就完了,接下来的事情由被spawn的程序处理

spawn-fcgi是一个很早期的程序,瞻仰一下即可

另外有:1996年的一段代码:http://www.fastcgi.com/om_archive/kit/cgi-fcgi/cgi-fcgi.c,和spawn-fcgi一个风格

本文地址: http://lutaf.com/220.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接