nginx学习十四 ngx_master_process_cycle(master进程)

ngx_master_process_cycle()函数,这个函数会启动工作进程干活,并且会处理信号量,处理的过程中会杀死或者创建新的进程,具体流程如下:

http://blog.csdn.net/xiaoliangsky/article/details/40866855
a)  阻塞所有nginx关心的信号;

b)  设置进程的title(如果你用ps –aux来查看就可以分清master与worker进程,这就是title的作用。);

c)  按照ngx_core_conf_t中worker_processes数,启动若干个work进程;

d)  启动一个缓冲管理进程;

e)  初始化几个标志:ngx_new_binary = 0; delay = 0; live = 1;

  后面一个循环对不同的状态进行不同处理,而那些状态多数是进程收到的不同信号。下面是各个处理的详解:

f)   delay不为0,如果收到SIGALRM信号ngx_sigalrm设为1,将delay时间乘以2;最后设置一个实时类型的计时器;

h)   挂起当前进程,等到有信号,就会从挂起状态退出,继续执行;

i)   退出挂起状态后,根据操作系统时间重新更新当前时间;

j)   ngx_reap为1(收到SIGCHLD信号,有worker退出(ngx_reap==1)),调用ngx_reap_children()回收子进程;

k)   如果子进程都退出了(!live)且当前进程收到ngx_signal_value(NGX_SHUTDOWN_SIGNAL)或ngx_signal_value(NGX_TERMINATE_SIGNAL)信号,本进程进行退出处理(ngx_master_process_exit());退出处理先删除pid文件,然后将调用所有模块的进程退出钩子,销毁内存池对象;

l)   如果ngx_terminate为1,delay为0,就设成50;如果delay>1000,向work进程发送SIGKILL信号,否则向work进程发送ngx_signal_value(NGX_TERMINATE_SIGNAL)信号;

m)   如果ngx_quit为1,向work进程发送ngx_signal_value(NGX_SHUTDOWN_SIGNAL)信号,然后将所有全局listening中的socket全关闭;continue;

n)   如果ngx_reconfigure为1(ngx_signal_value(NGX_RECONFIGURE_SIGNAL)信号对应),就重新读取config文件;重新创建并初始化ngx_cycle对象,启动work进程,启动缓冲管理进程,将live设为1,调用ngx_signal_worker_processes()发送ngx_signal_value(NGX_SHUTDOWN_SIGNAL)信号;

o)   ngx_new_binary为1(表示是新启动的一个进程),启动work进程,启动缓冲管理进程,然后将ngx_noaccepting设0;continue;

p)   如果ngx_restart为1(当ngx_noaccepting=1的时候会把ngx_restart设为1,重启worker),启动work进程,启动缓冲管理进程,live设为1;

q)   如果ngx_reopen为1(ngx_signal_value(NGX_REOPEN_SIGNAL)信号对应),则重新找开log文件࿰

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值