向后台进程发送 sigterm(信号15)可实现优雅退出,因其允许进程执行清理逻辑;默认 kill 命令即发此信号,需程序注册处理函数才能生效,不可用 kill -9 替代。

向后台进程发送 SIGTERM 实现优雅退出,核心是让进程有机会执行清理逻辑(如释放锁、落盘缓存、关闭连接),而不是直接终止。
用 kill 命令发 SIGTERM 最常用也最直接
kill 1234
不加参数时,kill 默认发送的就是 SIGTERM(信号编号 15)。只要目标进程没有忽略或屏蔽该信号,并且注册了处理函数,它就会进入退出流程。
如果想明确表达意图,可以显式指定:
kill -15 1234 # 或 kill -SIGTERM 1234
先找到进程 PID 是关键一步
- 查看所有含关键词的后台进程:
ps aux | grep "myserver"
- 或按命令名精确查找(避免 grep 自身混入):
pgrep -f "python server.py"
注意几个实际中容易出错的点
-
进程可能已响应 SIGTERM 但尚未退出,此时
ps仍能看到它。可加-w等待几秒再查:kill 1234 && sleep 2 && ps -p 1234 > /dev/null || echo "已退出"
如果进程没做信号处理,
SIGTERM会触发默认动作:直接终止。所以“优雅”前提是程序本身支持——比如用sigaction()注册了处理函数,并在其中调用exit()或设置退出标志位。不要用
kill -9替代:SIGKILL(信号 9)无法捕获、不能忽略,一发就死,资源来不及释放,可能导致数据丢失或文件损坏。
补充:对进程组发 SIGTERM(比如整个服务及其子进程)
kill -15 -1234 # 注意负号,表示向 PID 为 1234 的进程组发送
这在守护进程管理中很实用,避免只杀主进程而子进程变成孤儿。
本质上,SIGTERM 不是“命令进程退出”,而是“通知进程:你可以准备退出了”。真正是否退出、怎么退出,由进程自己决定。











