Loading... <blockquote>博主会将与Nginx有关的知识点总结到”<a title="Nginx由浅入深短篇系列" href="https://www.zsythink.net/archives/tag/nginx/" target="_blank" rel="noopener">nginx短篇系列</a>“文章中,如果你对nginx不是特别了解,请按照顺序阅读”nginx短篇系列”,以便站在前文的基础上理解新的知识点。</blockquote> 近期会比较忙,更新时间可能不会特别稳定,三四天才来看一看也有可能,还是请大家关注公众号吧,如果有更新会收到通知。 通过前文我们已经知道,当我们需要让nginx重新打开日志文件时,需要使用kill命令向nginx的master进程发送USR1信号,或者执行”nginx -s reopen”命令,它们的效果是完全一样的,那么你可能会问,”nginx -s”命令除了能够使用reopen,不是还能够使用reload、stop和quit么,那么reload、stop、quit有没有完全等效的信号呢?还真有,这些信号的对应关系如下: <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">reopen对应USR1信号</span></div> </div> <div class=""> <div><span class="enlighter-text">reload对应HUP信号</span></div> </div> <div class=""> <div><span class="enlighter-text">stop对应TERM信号或者INT信号</span></div> </div> <div class=""> <div><span class="enlighter-text">quit对应QUIT信号</span></div> </div> </div> </div> 通过上述对应关系我们可以推断出,”nginx -s reload”命令与”kill -HUP NginxMasterPid”命令的作用是一样的。 之前说过,master进程是负责管理worker进程的,其实,当我们向master进程发送信号时,master进程就会根据捕捉到的信号来管理worker进程,那么,我们都能向master进程发送哪些信号呢?我们能向master进程发送如下信号: <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">TERM或者INT:表示立即停止nginx</span></div> </div> <div class=""> <div><span class="enlighter-text">QUIT:表示优雅的停止nginx</span></div> </div> <div class=""> <div><span class="enlighter-text">HUP:重载配置文件</span></div> </div> <div class=""> <div><span class="enlighter-text">USR1:重新打开日志文件</span></div> </div> <div class=""> <div><span class="enlighter-text">USR2:热升级nginx程序</span></div> </div> <div class=""> <div><span class="enlighter-text">WINCH:优雅的关闭相应的worker进程</span></div> </div> </div> </div> 可以看到,我们通常可以手动的向master进程发送上述信号,而前四种信号又可以使用”nginx -s”命令代替,至于USR2信号和WINCH信号,就只能使用kill命令发送了,USR2信号和WINCH信号在热部署Nginx时(平滑升级编译安装的nginx时)会用到,等总结相关文章时再行介绍吧。 其实,不仅master进程可以直接接收信号,work进程也可以直接接收信号,但是通常情况下,我们不应该手动的向worker进程直接发送信号,而是应该通过master进程来管理他们,虽然我们不应该向work进程发送信号,但是此处还是列出worker进程可以接收到的信号,以便了解它们,worker进程可以接收的信号如下: <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">TERM信号或INT信号</span></div> </div> <div class=""> <div><span class="enlighter-text">QUIT信号</span></div> </div> <div class=""> <div><span class="enlighter-text">USR1信号</span></div> </div> <div class=""> <div><span class="enlighter-text">WINCH信号</span></div> </div> </div> </div> 如果因为某些原因,worker进程意外终止了,master进程会创建一个新的worker进程,以保证有对应的worker进程可以使用,当子进程worker进程终止时,会向master父进程发送CHLD信号,当master进程收到CHLD信号以后,就会知道对应的worker进程退出了,此时,master进程会创建一个新的worker进程,演示过程如下: <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">假设当前正常情况下,master进程号为</span><span class="enlighter-n1">12609</span><span class="enlighter-text">,两个worker进程的进程号为</span><span class="enlighter-n1">12610</span><span class="enlighter-text">、</span><span class="enlighter-n1">12611</span></div> </div> <div class=""> <div><span class="enlighter-c0"># ps -ef | grep nginx</span></div> </div> <div class=""> <div><span class="enlighter-text">root </span><span class="enlighter-n1">12609</span> <span class="enlighter-n1">1</span> <span class="enlighter-n1">0</span> <span class="enlighter-n1">17</span><span class="enlighter-text">:</span><span class="enlighter-n1">17</span><span class="enlighter-text"> ? </span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text"> nginx: master process nginx</span></div> </div> <div class=""> <div><span class="enlighter-text">nobody </span><span class="enlighter-n1">12610</span> <span class="enlighter-n1">12609</span> <span class="enlighter-n1">0</span> <span class="enlighter-n1">17</span><span class="enlighter-text">:</span><span class="enlighter-n1">17</span><span class="enlighter-text"> ? </span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text"> nginx: worker process</span></div> </div> <div class=""> <div><span class="enlighter-text">nobody </span><span class="enlighter-n1">12611</span> <span class="enlighter-n1">12609</span> <span class="enlighter-n1">0</span> <span class="enlighter-n1">17</span><span class="enlighter-text">:</span><span class="enlighter-n1">17</span><span class="enlighter-text"> ? </span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text"> nginx: worker process</span></div> </div> <div class=""> <div><span class="enlighter-text">root </span><span class="enlighter-n1">12613</span> <span class="enlighter-n1">9361</span> <span class="enlighter-n1">0</span> <span class="enlighter-n1">17</span><span class="enlighter-text">:</span><span class="enlighter-n1">17</span><span class="enlighter-text"> pts/</span><span class="enlighter-n1">1</span> <span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text"> grep --color=auto nginx</span></div> </div> <div class=""> <div></div> </div> <div class=""> <div><span class="enlighter-text">使用kill命令终止pid为</span><span class="enlighter-n1">12610</span><span class="enlighter-text">的worker进程</span></div> </div> <div class=""> <div><span class="enlighter-c0"># kill -INT 12610</span></div> </div> <div class=""> <div></div> </div> <div class=""> <div><span class="enlighter-text">再次查看nginx进程,会发现master进程自动创建了一个pid为</span><span class="enlighter-n1">12614</span><span class="enlighter-text">的worker进程。</span></div> </div> <div class=""> <div><span class="enlighter-c0"># ps -ef | grep nginx</span></div> </div> <div class=""> <div><span class="enlighter-text">root </span><span class="enlighter-n1">12609</span> <span class="enlighter-n1">1</span> <span class="enlighter-n1">0</span> <span class="enlighter-n1">17</span><span class="enlighter-text">:</span><span class="enlighter-n1">17</span><span class="enlighter-text"> ? </span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text"> nginx: master process nginx</span></div> </div> <div class=""> <div><span class="enlighter-text">nobody </span><span class="enlighter-n1">12611</span> <span class="enlighter-n1">12609</span> <span class="enlighter-n1">0</span> <span class="enlighter-n1">17</span><span class="enlighter-text">:</span><span class="enlighter-n1">17</span><span class="enlighter-text"> ? </span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text"> nginx: worker process</span></div> </div> <div class=""> <div><span class="enlighter-text">nobody </span><span class="enlighter-n1">12614</span> <span class="enlighter-n1">12609</span> <span class="enlighter-n1">0</span> <span class="enlighter-n1">17</span><span class="enlighter-text">:</span><span class="enlighter-n1">17</span><span class="enlighter-text"> ? </span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text"> nginx: worker process</span></div> </div> <div class=""> <div><span class="enlighter-text">root </span><span class="enlighter-n1">12624</span> <span class="enlighter-n1">9361</span> <span class="enlighter-n1">0</span> <span class="enlighter-n1">17</span><span class="enlighter-text">:</span><span class="enlighter-n1">17</span><span class="enlighter-text"> pts/</span><span class="enlighter-n1">1</span> <span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n4">00</span><span class="enlighter-text"> grep --color=auto nginx</span></div> </div> </div> </div> 通过上述描述,master进程和worker进程的关系是否更加清晰了呢? 转载自朱双印日志https://www.zsythink.net/archives/3239 Last modification:May 29, 2024 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏