网站大量收购独家精品文档,联系QQ:2885784924

lighttpd1.4.18代码分析(一).doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
lighttpd1.4.18代码分析(一).doc

  lighttpd1.4.18代码分析(一)   lighttpd是目前非常流行的ax-ain函数中: #ifdef HAVE_FORK     /* start _childs = srv-gt;srvconf.max__childs gt; 0) {         int child = 0;         p; !srv_shutdop; !graceful_shutdo_childs gt; 0) {                 s_childs--;                     break;                 }             } else {                 int status;                 if (-1 != p;status)) {                     /**                      * one of our _childs++;                 } else {                     sainloop who can help us here                          */                         if (handle_sig_hup) {                             handle_sig_hup = 0;                             log_error_cycle(srv);                             /**                              * forward to all procs in the process-group                              *                              * we also send it ourself                              */                             if (!forwarded_sig_hup) {                                 forwarded_sig_hup = 1;                                 kill(0, SIGHUP);                             }                         }                         break;                     default:                         break;                     }                 }             }         }         /**          * for the parent this is the exit-point          */         if (!child) { 12下一页 ....,。/**              * kill all children too              */             if (graceful_shutdo_childs中, 同时另一个变量child是一个标志位, 为0时是父进程(p; !srv_shutdop; !graceful_shutdo_childsgt;0就执行fork函数创建子进程, 对于子进程而言,赋值child=1, 同时num_childs值-1, 于是子进程不满足!child这个条件退出循环继续执行下面的代码, 而父进程还在循环中, 如果num_childs=0也就是所有的子进程都创建成功了, 那么父进程就阻塞在调用_childs+1, 于是继续前面的调用, 再次创建出子进程.   这也就是watcher和worker的来历:父进程负责创建子进程并且监控是否有子进程退出, 如果有, 那么再次创建出子进程;而子进程是worker, 是具体执行服务器操作的工, 在被创建完毕之后退出循环, 去做下面的事情.而如果父进程退出这个循环, 那么一定是srv_shutdown或者graceful_shutdown之一变为了非零值, 所以在循环外, 还要进行判断, 如果是父进程, 那么就是服务器程序要退出了, 最后作一些清理的工作.   用伪码表示这部分代码就是: 如果(是父进程 而且 当前没有要求终止服务器) 就一直循环

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档