NGX 信号处理流程

本文介绍了NGX服务器中信号处理的流程,包括ngx_init_signals函数用于注册信号处理,ngx_signal_handler函数处理不同类型的信号,如停止、重启、重新打开日志等。主进程和工作进程根据接收到的信号进行相应的操作,如关闭连接、退出或重新配置。
摘要由CSDN通过智能技术生成

int ngx_cdecl
main(int argc, char *const *argv)
{
    ....
#if !(NGX_WIN32)

    if (ngx_init_signals(cycle->log) != NGX_OK) { // 服务器启动时进行初始化信号处理
        return 1;
    }

    if (!ngx_inherited && ccf->daemon) {
        if (ngx_daemon(cycle->log) != NGX_OK) {
            return 1;
        }

        ngx_daemonized = 1;
    }

    if (ngx_inherited) {
        ngx_daemonized = 1;
    }

#endif
    ......
    
    // 单进程服务器
    if (ngx_process == NGX_PROCESS_SINGLE) {
        ngx_single_process_cycle(cycle);

    } else {
        ngx_master_process_cycle(cycle);
    }

    return 0;
}
下来再看看ngx_init_signals函数实现之前先看看结构
typedef struct {
    int     signo;       		// 信号值
    char   *signame;	// 信号名字
    char   *name;		// 服务器响应信号操作的名字
    void  (*handler)(int signo);// 信号处理函数
} ngx_signal_t;
再看看全局变量ngx_signal_t  signals[] 所有的信号及其处理函数
ngx_signal_t  signals[] = {
    { ngx_signal_value(NGX_RECONFIGURE_SIGNAL),
      "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL),
      "reload",
      ngx_signal_handler },


    { ngx_signal_value(NGX_REOPEN_SIGNAL),
      "SIG" ngx_value(NGX_REOPEN_SIGNAL),
      "reopen",
      ngx_signal_handler },


    { ngx_signal_value(NGX_NOACCEPT_SIGNAL),
      "SIG" ngx_value(NGX_NOACCEPT_SIGNAL),
      "",
      ngx_signal_handler },


    { ngx_signal_value(NGX_TERMINATE_SIGNAL),
      "SIG" ngx_value(NGX_TERMINATE_SIGNAL),
      "stop",
      ngx_signal_handler },


    { ngx_signal_value(NGX_SHUTDOWN_SIGNAL),
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值