Nginx多进程模型中,Master进程以root权限统筹全局,负责配置解析、Worker派生、信号中转与异常回收;Worker进程以非特权用户运行,专注处理请求,退出分主动(SIGQUIT)和被动(SIGTERM/崩溃)两类,Master通过waitpid(WNOHANG)非阻塞回收并拉起新进程。

Nginx 的多进程模型核心在于 Master 进程统筹全局,Worker 进程专注处理请求,二者分工明确。Master 不参与实际网络 I/O,只负责配置加载、信号接收、Worker 生命周期管理及异常回收——这是稳定性和热更新能力的基础。
Master 进程的核心职责
Master 是 Nginx 启动后唯一以 root 权限运行的进程(若需绑定 1024 以下端口),主要承担以下任务:
- 配置解析与初始化:读取 nginx.conf,校验语法,分配内存结构(如共享内存区、连接池),但不创建监听 socket
- Worker 进程派生:调用 fork() 创建指定数量的 Worker 子进程(由 worker_processes 指令控制),每个 Worker 独立继承监听 socket 的文件描述符
- 信号中转与响应:接收系统信号(如 SIGHUP、SIGUSR2、SIGQUIT),转换为内部事件,通知 Worker 执行 reload、升级或优雅退出
- 健康监控与兜底回收:通过 waitpid() 非阻塞轮询,捕获已退出 Worker 的 exit status;若 Worker 异常终止(如段错误、被 kill -9),Master 会立即拉起新进程补足 worker_processes 数量
Worker 进程的生命周期与退出方式
Worker 进程默认以非特权用户(由 user 指令指定)运行,每个独立处理连接和请求。其退出分两类:
- 主动退出:收到 Master 发送的 SIGQUIT(如执行 nginx -s quit),完成当前请求后干净退出
- 被动退出:被 SIGTERM(nginx -s stop)、OOM killer 终止、或发生未捕获崩溃;此时 Master 会检测到子进程死亡并触发 respawn
注意:Worker 不响应 SIGHUP —— 该信号由 Master 接收后,启动全新 Worker 并逐步关闭旧 Worker(通过 SIGQUIT),实现零停机重载配置。
子进程回收的关键机制:waitpid + WNOHANG
Master 不使用阻塞式 wait(),而是通过 waitpid(-1, &status, WNOHANG) 实现非阻塞回收:
- WNOHANG 标志确保调用立即返回,避免 Master 被卡住,保障信号响应实时性
- Master 通常在事件循环中周期性调用(例如每次 epoll_wait 返回后),检查是否有子进程终止
- 若 waitpid 返回 >0,说明有 Worker 退出,Master 解析 status 判断退出原因(正常退出 / 崩溃),并按需 fork 新 Worker
- 崩溃 Worker 的退出码、core dump(若开启)和 error log 中的 “segmentation fault” 等线索,是定位问题的关键依据
常见异常场景与 Master 行为
理解 Master 如何应对异常,有助于排查线上问题:
- Worker 频繁崩溃:Master 会持续 fork 新进程,导致进程数飙升、CPU 占用高;需检查日志中的 assertion failure、第三方模块兼容性或内存越界
- worker_processes 设置过高:超过 CPU 核心数且无实际并发收益,反而增加上下文切换开销和 Master 回收负担
- Master 自身被 kill -9:所有 Worker 会成为孤儿进程,最终被 init 收养并退出(取决于系统设置),服务中断
- 共享内存冲突(如 stub_status 或 limit_req zone):Master 在 reload 时可能因旧 zone 未释放而报错,需确保模块正确实现 shm 清理逻辑

















