11.10 ngx_signal_t结构体

时间 : 16-03-29 栏目 : nginx专题 作者 : 老薛 评论 : 0 点击 : 787 次

Nginx服务器的启动、停止和升级都是通过信号控制的。在下一章中,我们会学习到信号控制源码的相关知识,因此在这里需要先介绍一下Nginx服务器程序存放信号信息的ngx_signal_t结构体。

该结构体的定义我们在/nginx/src/os/unix/ngx_process.c文件中可以找到:

    typedef struct {  
        int     signo;  
        char   *signame;  
        char   *name;  
        void  (*handler)(int signo);  
    } ngx_signal_t;  

signo,信号的编号。

*signame,信号的字符串表现形式,如"SIGIO"。

*name,信号的名称,如"stop"。

*handler,信号处理函数。

Nginx服务器程序将所有可能遇到的信号保存在一个结构数组中,该数组我们仍然可以在/nginx/src/os/unix/ngx_process.c文件中找到:
 

    ngx_signal_t  signals[] = {  
        { ngx_signal_value(NGX_RECONFIGURE_SIGNAL), //RECONFIGURE信号,重新读取配置信息  
          "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL),  
          "reload",  
          ngx_signal_handler },  
        { ngx_signal_value(NGX_REOPEN_SIGNAL),  //RECONFIGURE信号,重新运行工作进程  
          "SIG" ngx_value(NGX_REOPEN_SIGNAL),  
          "reopen",  
          ngx_signal_handler },  
        { ngx_signal_value(NGX_NOACCEPT_SIGNAL),    //NOACCEPT信号,工作进程不接受事件  
          "SIG" ngx_value(NGX_NOACCEPT_SIGNAL),  
          "",  
          ngx_signal_handler },  
        { ngx_signal_value(NGX_TERMINATE_SIGNAL),   //TERMINATE信号,工作进程终止  
          "SIG" ngx_value(NGX_TERMINATE_SIGNAL),  
          "stop",  
          ngx_signal_handler },  
        { ngx_signal_value(NGX_SHUTDOWN_SIGNAL),    //SHUTDOWN信号,结束网络通信,进程退出  
          "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL),  
          "quit",  
          ngx_signal_handler },  
        { ngx_signal_value(NGX_CHANGEBIN_SIGNAL),   //CHANGEBIN信号,热升级Nginx运行程序  
          "SIG" ngx_value(NGX_CHANGEBIN_SIGNAL),  
          "",  
          ngx_signal_handler },  
                                                //以下是常见的系统信号  
        { SIGALRM, "SIGALRM", "", ngx_signal_handler },  
        { SIGINT, "SIGINT", "", ngx_signal_handler },  
        { SIGIO, "SIGIO", "", ngx_signal_handler },  
        { SIGCHLD, "SIGCHLD", "", ngx_signal_handler },  
        { SIGSYS, "SIGSYS, SIG_IGN", "", SIG_IGN },  
        { SIGPIPE, "SIGPIPE, SIG_IGN", "", SIG_IGN },  
        { 0, NULL, "", NULL }  
    };  

数组中一共包含了12个信号,前面6个是Nginx服务器特别支持的信号。涉及的宏定义有:
 

    #define NGX_SHUTDOWN_SIGNAL      QUIT  
    #define NGX_TERMINATE_SIGNAL     TERM  
    #define NGX_NOACCEPT_SIGNAL      WINCH  
    #define NGX_RECONFIGURE_SIGNAL   HUP  
    #define NGX_REOPEN_SIGNAL        INFO  
    #define NGX_CHANGEBIN_SIGNAL     XCPU 

本文标签

除非注明,文章均为( 老薛 )原创,转载请保留链接: http://www.bdkyr.com/nginx-2/1577.html

11.10 ngx_signal_t结构体:等您坐沙发呢!

发表评论

7 + 5 = ?


博主微信号,很高兴为您提供帮助

随便看看

0