nginx继承socket 和 热代码替换

本文详细解析了nginx的热代码替换过程,涉及nginx如何通过ngx_add_inherited_sockets函数从环境变量中继承socket,以及在接收到USR2信号后,如何进行热启动,包括socket的保存、子进程的创建和execve的使用,确保socket文件描述符在进程间继承。
摘要由CSDN通过智能技术生成
    在看nginx源码的时候,遇到这样一个函数:ngx_add_inherited_sockets, 这个函数在main函数里被调用。
  里面具体做的事情就是:从一个环境变量读出socket文件描述符,然后这个socket文件描述符就可以用了,不用调用socket()函数创建。具体可以看这位大神的博客:http://blog.csdn.net/livelylittlefish/article/details/7277607
 
  但我读完这篇博客还是有一个困惑的问题,可能是我智商捉急不能理解大神的文章:为什么socket从环境变量里读出来,就能用了?
 
    进过反复阅读代码终于懂了,这就是nginx热启动。
    
    来看一下这个热启动的执行过程。
    
    1:给nginx发一个USR2信号:在ngx_process.c文件里有一个signals信号数组,这个数组定义了nginx所支持的信号,
    
    其中一个,
    { ngx_signal_value(NGX_CHANGEBIN_SIGNAL),
      "SIG" ngx_value(NGX_CHANGEBIN_SIGNAL),
      "",
      ngx_signal_handler },
    
    ngx_config.h里面有
    #define NGX_CHANGEBIN_SIGNAL     USR2
    
    2:处理函数ngx_signal_hanler做了啥:
      ngx_proces
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值