码迷,mamicode.com
首页 > 系统相关 > 详细

Nginx源码分析—worker进程的创建

时间:2014-11-19 20:37:35      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:nginx

Nginx源码分析—worker进程的创建

假设现在ngx_init_cycle已经结束(毕竟这个函数确实庞大),也就是说关于nginx的初始化都已经结束。那么看看如何创建进程模型ngx_master_process_cycle。

在这个函数中,首先情况一些信号,然后将需要关注的信号注册进去(这个时候关于信号的处理函数已经被注册),可以看出来master进程关注的信号有10个。比如SIGCHLD等。接下来调用ngx_start_worker_processes函数,这个函数就是开启worker进程的函数,剩下的master进程就进入一个死循环,这个死循环就是等待这个外部信号的激活,如果有一个信号,那么就更新一次时间,master进程大部分时间都阻塞在sigsuspend函数上。接受到不同的信号进行不同的处理,有的信号需要传递给worker进程。

看ngx_start_worker_processes函数,这个函数中有一个for循环,一次循环创建一个worker进程,都是打开父子进程之间的socketpair,, ngx_pass_open_channel函数将自己的信息传递给别的所有进程。

ngx_spawn_process函数中创建socketpair,然后fork,子进程调用ngx_worker_process_cycle,。

ngx_worker_process_cycle这个函数也非常的重要,在ngx_worker_process_init函数中屏蔽了从父进程继承的所有信号处理函数,同时关闭从父进程继承的socketpair套接字,这对socketpair,其中0为了写,1为了读,所以同时需要关闭自己的写,只需要打开自己读即可,同时在读的套接字上注册ngx_channle_handler函数,这个函数是为了修改全局变量的,为了worker进程接受父进程传递的信号而存在的。Ngx_add_channel_event将自己的1添加到监听队列中。接下来worker进程就进入了死循环,要么处理事件,要么处理信号。

ngx_process_events_and_timers这个函数就是处理业务的。

接下来解析业务的整流程!

Nginx源码分析—worker进程的创建

标签:nginx

原文地址:http://blog.csdn.net/yusiguyuan/article/details/41286921

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!