首页 > C/C++, Linux, Nginx > nginx进程管理-signaller进程

nginx进程管理-signaller进程

2020年5月25日
nginx控制进程用来控制master进程,我们知道nginx有四种类型:
位于:src/os/unix/ngx_process_cycle.h

当我们要对nginx升级、重启、切割等待日志时,这是nginx的角色为NGX_PROCESS_SIGNALLER

也就是说在我们使用nginx -s 信号时这时启动的nginx属于NGX_PROCESS_SIGNALLER类型了,做为signaller的nginx它的作用是对master的管理,信号类型存储在ngx_signal这个变量里,它的用法是这样的:

当程序启动时我们指定了合法的-s参数时,ngx_process被设置成了NGX_PROCESS_SIGNALLER,接下来的初始化函数ngx_init_cycle中,识别了NGX_PROCESS_SIGNALLER这个类型会把创建pid,创建文件,打开端口等等这些全部忽略,只调用了解析配置和各个模块的初始化配置的回调函数,所以我们在写core模块时一定要注意不要在ini_conf回调函数打开资源。

我们可以看到在初始化时如果是信号进程会跳过一些系申请统资源之类的操作,同时也会初始化最外层的core模块的配置。在所有配置解析并初始化完成后,信号进程开始给master发送指令了,这过程就是读取配置后的pid文件里的进程ID,然后通过进程ID给master进行发送信号了。

如果只是发送信号,从代码里了解到下面是等价的:(假设master的进程号是12345)

至于为什么要用这些信号呢或者大家可以思考一下,这两种方法的利弊在什么地方。

分类: C/C++, Linux, Nginx 标签:
本文的评论功能被关闭了.