// 固定产生 10 个worker进程工作, 有worker退出时, 重新创建worker。
// 类似于lighttpd 的 watcher,worker模型
// 参考:http://bbs.chinaunix.net/thread-1251434-1-1.html
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
void child_main()
{
printf("child [%5d] is working.\n", getpid());
sleep(5);
printf("child [%5d] is done.\n", getpid());
exit(1);
}
int main()
{
unsigned int worker_num = 10;
int status;
pid_t pid;
while(1) {
if (worker_num > 0) {
pid = fork();
if(pid < 0) {
perror("fork");
exit(1);
}else if( pid == 0 ) { // child
child_main();
}else if( pid > 0 ) { // father
worker_num--;
}
}else{
// wait for a child to exit, and update worker_num
pid = wait(&status);
printf("father: chile [%5d] is done. Create a new one...\n", pid);
worker_num++;
}
}
return 0;
}
lighttpd源码学习
最新推荐文章于 2019-07-11 16:01:18 发布