在linux环境中运行nginx时,根据不同的业务场景,我们需要用不同的方式将其关闭。有些场景要求不影响已有连接,有些则希望立刻释放端口。理解nginx的进程模型与信号机制,才能选对停止命令。

一、nginx进程与信号基础
nginx启动后默认采用多进程模型:一个master主进程负责管理配置与worker子进程,若干worker进程处理实际请求。master进程会监听特定信号,根据信号类型决定如何关闭服务。这种机制让我们不必暴力杀进程,也能安全停下服务。
常用的关闭相关信号包括QUIT、TERM和INT。QUIT代表优雅退出,master会通知worker先处理完当前连接再退出;TERM和INT则是快速终止,worker立刻停止接收新连接并退出,正在传输的请求会被中断。掌握信号差异,是选对关闭方式的前提。
1.1 查看nginx进程
在发送信号前,我们通常先确认nginx是否在运行以及主进程pid。可以使用ps命令配合grep过滤,也可以通过nginx自带的pid文件读取。
多数情况下,nginx安装时会在配置中指定pid文件路径,例如/var/run/nginx.pid。该文件内容就是master进程的pid,直接读取即可避免人工筛选错误。
# 查看nginx相关进程 ps -ef | grep nginx # 读取pid文件获取主进程号 cat /var/run/nginx.pid
二、使用nginx自带命令关闭
nginx二进制自身提供了-s参数,用于向运行中的master进程发送控制指令。这种方式最直观,不需要手动查pid,也不会误杀其他进程。
其中stop表示快速停止,内部等价于发送TERM信号;quit表示优雅停止,内部发送QUIT信号。如果nginx命令不在环境变量中,需要写全路径,例如/usr/sbin/nginx -s quit。
2.1 优雅关闭示例
以下命令会让nginx处理完已有请求后再退出,适合业务低峰期发布使用。执行后可以用ps命令确认进程是否已消失。
# 优雅停止,不中断已有连接 nginx -s quit # 若提示权限不足,使用sudo sudo nginx -s quit
2.2 快速关闭示例
当nginx卡死或配置错误无法优雅退出时,可以使用stop快速终止。注意这会让正在访问的用户断开连接。
# 快速停止 nginx -s stop
三、利用系统服务管理器关闭
在主流linux发行版中,nginx通常注册为systemd或sysvinit服务。通过服务管理器关闭,不仅能停止进程,还会同步更新服务状态,避免开机自动拉起冲突。
使用systemctl时,stop对应快速终止,而部分包提供了nginx -s quit的封装命令。若系统使用service脚本,写法与systemctl类似,只是后端调用不同。
3.1 systemctl方式
以下命令适用于ubuntu 16.04+、centos 7+等使用systemd的系统。stop后可用status确认是否退出。
# 使用systemctl停止 sudo systemctl stop nginx # 查看状态 systemctl status nginx
3.2 service方式
较老发行版可用service命令,其本质调用init.d脚本,内部依旧是向master发信号。
# 使用service停止 sudo service nginx stop
四、直接用kill发送信号
如果上述工具都不可用,我们可以手动用kill命令向master进程发送信号。需要注意必须杀master的pid,而不是worker,否则master会重新拉起worker。
QUIT信号编号为3,TERM为15。发送后稍等几秒,再用ps确认。若进程仍在,可追加KILL信号(9)强制退出,但强制退出可能导致pid文件残留。
# 获取主进程pid PID=$(cat /var/run/nginx.pid) # 优雅关闭 kill -QUIT $PID # 若无效,快速终止 kill -TERM $PID
五、关闭后的检查与避坑
不论用哪种方式,关闭后都应确认端口是否已释放。nginx默认监听80或443,若进程退出了但端口仍被占用,往往是子进程残留或时间_wait状态。
可以用ss或netstat查看监听情况。如果发现nginx进程已经不在但端口未空,可检查是否有其他程序占用了配置中的端口,或者等待内核回收。此外,若使用pid文件管理,停止后最好删除过期pid文件,防止下次启动报错。
# 查看80端口占用 ss -lntp | grep ':80' # 清理残留pid文件(确认进程已死后再做) sudo rm -f /var/run/nginx.pid
| 关闭方式 | 命令示例 | 连接影响 | 适用场景 |
|---|---|---|---|
| 优雅停止 | nginx -s quit | 已有连接处理完再断 | 低峰发布、配置更新 |
| 快速停止 | nginx -s stop | 立即断开 | 紧急停服、卡死 |
| 系统服务 | systemctl stop nginx | 取决于封装 | 受管服务环境 |
| kill信号 | kill -QUIT pid | 可控 | 工具缺失时 |
综合来看,日常运维优先使用nginx -s quit或服务管理器停止,既安全又不易出错。只有在异常状态下才考虑kill强制终止,并在操作后做好端口与pid文件检查。
linuxnginxstop_service修改时间:2026-08-07 16:27:18