lighttpd中的watcher workers模型
/* start watcher and workers */num_childs = srv->srvconf.max_worker;if (num_childs > 0) {int child = 0;while (!child && !srv_shutdown && !graceful_shutdown) {if (num_childs > 0) {switch (fork()) {case -1:/*出错返回父进-1*/return -1;case 0:/*fork成功 返回给子进程 0*/child = 1;break;default::/*fork成功 返回给父进程的是子进程ID*/num_childs--;break;}} else {int status;if (-1 != wait(&status)) {/*** one of our workers went away*/num_childs++;} else {switch (errno) {case EINTR:/** * if we receive a SIGHUP we have to close our logs ourself as we don't* have the mainloop 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) {/*** kill all children too*/if (graceful_shutdown) {kill(0, SIGINT);} else if (srv_shutdown) {kill(0, SIGTERM);}log_error_close(srv);network_close(srv);connections_free(srv);plugins_free(srv);server_free(srv);return 0;}}这个模型主要是利用了fork函数的特性,fork函数 成功的时候,在子进程中获得返回值0,在父进程中获得为子进程的ID,失败出错时 是在父进程中获得-1
页:
[1]