Nginx进程结构与信号管理

Nginx的进程结构

学习搭建了具备缓存的反向代理服务之后就干别的去了,今天把openresty拉起来以后,看到了nginx和之前相比增加了两个进程:

那么跟下边这张图就能完全对应起来:

Nginx会有一个父进程Master和很多的子进程,子进程可以分为两个类别,一类Worker,一类Cache。Worker的数量在nginx.conf中可以配置,而Cache类进程在配置了反向代理缓存时使用,其中只有一个做缓存管理的cache manager进程和一个做缓存加载的cache loader进程。Nginx进程间的通讯都是使用共享内存来解决的。

信号管理

Master进程

Master会监控Worker进程是否发送了CHLD信号来判断Worker进程是否发生异常终止,还可以通过接收信号来管理Worker进程,比如:

  • TERM、INT: 立刻停止进程。
  • QUIT: 优雅的退出,等请求处理完才退出,用户无感知。
  • HUP: 重载配置文件。
  • USR1: 重新打开日志文件,做日志文件的切割。
    以下两个信号只能通过Kill发送:
  • USR2: 热部署第一阶段,启动新进程。
  • WINCH: 热部署第二阶段,停止老进程。

    SIGCHLD: 当父进程的某一子进程终止(或者因为调用了exit(),或者因为被信号杀死)时,内核将向父进程发送该信号。当父进程的某一子进程因收到信号而停止或恢复时,也可能向父进程发送该信号。

    Worker进程

    对应的接收Master信号: TERM、INT,QUIT,HUP,USR1,WINCH

命令行

启动Nginx以后,Nginx会把Master进程的PID记录到一个文件中,一般是Nginx安装目录下logs/nginx.pid,通过命令行发出的命令就是对该PID发送对应的信号:

  • reload: HUP
  • reopen: USR1
  • stop: TERM
  • quit: QUIT
0%