Nginx 的进程管理主要有 Single 和 Master 两种模型:
     
     1) Single 模型是以 单进程方式 工作;
     2) Master 模型是以 一个 master 进程 + 多个 worker 进程 的方式 工作;
 
参考源码:src/os/unix/ngx_process/cycle
 
void ngx_master_process_cycle(ngx_cycle_t *cycle);
void ngx_single_process_cycle(ngx_cycle_t *cycle);
     
一般在生产环境中主要采用 Master 模型。下面也主要学习和了解 Master 模型的工作方式。
     
     master 进程主要负责对外揽活(即接收客户端的请求),并将活儿合理的分配给多个worker,每个worker 进程主要负责干活(处理请求)。
     
root     16129     1  0 22:47 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody   16130 16129  0 22:47 ?        00:00:00 nginx: worker process                                         
nobody   16131 16129  0 22:47 ?        00:00:00 nginx: worker process                                         
nobody   16132 16129  0 22:47 ?        00:00:00 nginx: worker process                                         
nobody   16133 16129  0 22:47 ?        00:00:00 nginx: worker process
     
     master 进程只能有一个,其主要功能就是完成 nginx 服务器启动时的全局初始化工作 和 管理 worker 进程。
     
     注:一般 worker 的数目设置为 CPU 的核数一样多(查看配置 worker_processes - http://nginx.org/en/docs/ngx_core_module.html#worker_processes 从 1.2.5 版本起支持 auto 参数值,可以自动检测 cpu cores 并设置 worker_processes 参数)。
     
     + 下面为 master 进程可接受的 signal 以及处理功能:
     
          - TERM, INT          快速关闭
          - QUIT                  从容关闭主进程
          - HUP                   重新装载配置,在新的工作进程中开始使用新配置,且从容关闭 old worker
          - USR1                  重新打开日志文件
          - USR2                  平滑升级可执行程序
          - WINCH               从而关闭 worker 进程
     
     示例:
 
# 可以看到 80 端口依然开启
[root@cn ~]# kill -WINCH 16129
[root@cn ~]# netstat -antp | grep nginx
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      16129/nginx.conf   
[root@cn ~]# ps -ef | grep nginx | grep -v grep
root     16129     1  0 22:47 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@cn ~]# 

# 可以看到 worker 进程又被启动了
[root@cn ~]# kill -HUP 16129
[root@cn ~]# ps -ef | grep nginx | grep -v grep
root     16129     1  0 22:47 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody   16321 16129  0 22:57 ?        00:00:00 nginx: worker process                                         
nobody   16322 16129  0 22:57 ?        00:00:00 nginx: worker process                                         
nobody   16323 16129  0 22:57 ?        00:00:00 nginx: worker process                                         
nobody   16324 16129  0 22:57 ?        00:00:00 nginx: worker process                                         
[root@cn ~]# 
     
     + 下面为 worker 进程可接受的 signal 和 处理功能:
 
          - TERM, INT           快速关闭 worker 进程
          - QUIT                   从容关闭 worker 进程
          - USR1                   重新打开日志文件
          - WINCH               abnormal termination for debugging (requires debug_points to be enabled)