一、概述
不论是什么类型的应用,都会希望在服务停止前能够收到停止通知,有一定的时间做退出前的释放资源、关闭连接、不再接收外部请求等工作。比如你的应用正在处理HTTP请求,你希望在停止前能完成所有未完成的请求;如果你的应用正在写入文件,你也许希望在停止容器前能够正确的刷新数据到磁盘并关闭文件。
二、Linux常见信号
要了解应用优雅停止方法,我们先回顾一下与容器相关的Linux常见信号。
信号是一种进程间通信的形式。一个信号就是内核发送给进程的一个消息,告诉进程发生了某种事件。进程需要为自己感兴趣的信号注册处理程序,举例:
-
为了能让程序优雅的退出(接到退出的信号后,对资源进行清理),一般程序都会处理SIGTERM信号。与SIGTERM信号不同,SIGKILL信号会粗暴的结束一个进程;
-
许多守护进程会通过处理SIGHUP信号实现热加载配置文件。
使用 kill -l 命令会显示Linux支持的信号列表。其中编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。
下面对常用的信号