Welcome

首页 / 软件开发 / .NET编程技术 / lighttpd1.4.20源码分析 -工作模型

lighttpd1.4.20源码分析 -工作模型2011-12-14 博客园 kernel@hcylighttpd的工作模型很简单──一个主进程加多个工作进程的多进程模型,也就是所谓的watcher-worker模型。

整个程序的入口(main函数)在server.c文件中。在main函数的开始部分必然是处理参数和各种繁杂的初始化工作。其中有两个地方要重点看一起。第一个是下面的语句:

1 if (test_config) //没有进行任何测试。。。
2 {
3 printf("Syntax OK ");
4 }

这个If语句是为了判断配置文件的语法是否合法。但是,明显,没有进行任何的测试,而仅仅是输出了一句话。

第二个是函数daemonize()。这个函数的作用是使程序进入daemon。函数的详细内容如下:

1 static void daemonize(void)
2 {
3 /*
4 * 忽略和终端读写有关的信号
5 */
6 #ifdef SIGTTOU
7 signal(SIGTTOU, SIG_IGN);
8 #endif
9 #ifdef SIGTTIN
10 signal(SIGTTIN, SIG_IGN);
11 #endif
12 #ifdef SIGTSTP
13 signal(SIGTSTP, SIG_IGN);
14 #endif
15 if (0 != fork()) /* 产生子进程,父进程退出 */
16 exit(0);
17 if (-1 == setsid())/* 设置子进程的设置ID */
18 exit(0);
19 signal(SIGHUP, SIG_IGN);/* 忽略SIGHUP信号 */
20 if (0 != fork())/* 再次产生子进程,父进程退出 */
21 exit(0);
22 if (0 != chdir("/"))/* 更改工作目录为根目录 */
23 exit(0);
24 }

这里作者使用了标准的产生*nix daemon的方法。两次调用fork并退出父进程。具体的原因读者可以参阅《Unix环境高级编程》(APUE)中有关daemon的讲解部分。