Nginx 进程管理,你须要了解哪些?

Nginx 是一个多进程的程序,多进程之间进行通信可使用共享内存、信号等。当作进程间管理的时候,一般只使用信号。nginx

今天就来看一下 Nginx 进程管理中的信号是怎样使用的。网络

Nginx 进程管理:信号

Nginx进程管理:信号

从上图能够看出,可以发送和处理信号的有 master 进程、worker 进程、Nginx 命令行。工具

首先让咱们来看下 Master 进程。ui

Master 进程

由于 master 进程会启动 worker 进程,因此它管理 worker 进程的方式首先是监控 worker 进程有没有发送 CHLD 信号,由于 Linux 操做系统中规定当子进程终止的时候会向父进程发送 CHLD 信号,因此若是 worker 进程因为一些模块代码 bug 致使 worker 进程意外终止,那么 master 进程能够马上经过 CHLD 发现这样一个事件,而后从新把 worker 进程拉起。操作系统

Master 进程还会经过接受一些信号,来管理 worker 进程。命令行

Master 进程能够接受的信号有:日志

  • TERM、INT:马上中止 Nginx 进程
  • QUIT:优雅中止 Nginx 进程,不会对用户马上发送结束链接请求(好比像 TCP 中的 reset 复位请求这样的报文)
  • HUP:表示重载配置文件
  • USR1:表示从新打开日志文件,作日志文件的切割
  • USR2:专门针对作热部署使用
  • WINCH:表示优雅的退出全部 worker 进程

其中,粉色的信号 USR2 和 WINCH 只能经过 Linux 的 kill 命令行发送信号,也就是说咱们须要先找到 master 进程所在的 PID,对这个 PID 发送 USR2 或者 WINCH,而其余的 4 个有对应的 Nginx 命令的。blog

Worker 进程

一般是不直接对 worker 进程发送信号的,由于咱们但愿由 master 进程来管理 worker 进程。虽然直接对 worker 进程发送信号,也会让 worker 进程产生一样的结果,可是一般不这样作,每每是由 master 进程管理,master 进程收到信号后,会再把信号发送给 worker 进程。进程

Nginx 命令行

Nginx 在启动之后,Nginx会把他的 PID 放到一个文件中。默认是记录在 Nginx安装目录的 /logs/nginx.pid 文件中,记录了 Nginx 的 master 进程的 PID。事件

当咱们再次使用 nginx -s 这样的命令行的时候,那么 nginx 的工具命令行就会去读取PID文件中的 master 进程的 PID,向这个 PID 发送一样的 HUP、USR一、TERM、QUIT 这样的信号,而这样的命令对应着命令 reload、reopen、stop、quit,因此调用 nginx 命令行和直接用 kill 发送信号的效果是同样的。

总结

这篇文章主要介绍了 Nginx 进程管理中信号的使用,主要涉及到 Master 进程、Worker 进程和 Nginx 命令行。咱们可能会看到网络上有不少管理日志文件或者管理热升级的脚本,这些脚本中有时候是用 kill 直接发送信号,有时候是调用 nginx -s 这样一个命令行,不少人以前可能还会很困惑,那么我相信你们如今应该很了解这样一个过程怎样发生的了。

相关文章
相关标签/搜索