进程、Signal 与安全停止
找到准确目标
pgrep -af node
ps -fp <PID>
systemctl status nginx
pm2 describe nloop
不要使用宽泛的 pkill node 或 killall node,一台服务器可能有多个应用。PID 也会复用,应同时核对命令、用户、启动时间和父进程。
Signal
kill -TERM <PID>
kill -KILL <PID>
SIGTERM请求进程优雅退出,应用可以停止接流、等待请求并关闭资源。SIGKILL由内核立即终止,应用无法捕获或清理。
kill 成功只表示 Signal 已发送,不表示进程已经退出:
while kill -0 <PID> 2>/dev/null; do sleep 1; done
实际操作应有明确等待上限,超时后收集现场并决定是否升级为强制终止。
推荐优先级
pm2/systemctl/application stop
→ SIGTERM
→ 等待并验证
→ 收集卡住原因
→ 最后才 SIGKILL
强制退出可能中断请求、截断文件、留下临时目录或丢失缓冲日志。数据库事务通常会回滚,但不能因此假设业务整体一定一致。