全棧工程師開發手冊 (作者:欒鵬)
架構系列文章
注意:docker 正常退出和異常退出都不會自動發起SIGTERM,java正常或異常退出,jvm會發起SIGTERM信號
docker kill 直接殺死容器進程
docker stop是向容器進程發送SIGTERM信號,本文介紹容器中的進程捕獲 SIGTERM 信號,優雅的退出。
github地址:https://github.com/626626cdllp/k8s/tree/master/test/docker-signal
先來了解一下信號
SIGINT
程序終止(interrupt)信號, 在用戶鍵入INTR字符(通常是Ctrl-C)時發出,用於通知前臺進程組終止進程。
SIGQUIT
和SIGINT類似, 但由QUIT字符(通常是Ctrl-)來控制. 進程在因收到SIGQUIT退出時會產生core文件, 在這個意義上類似於一個程序錯誤信號。
SIGTERM
程序結束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理。通常用來要求程序自己正常退出,shell命令kill缺省產生這個信號。如果進程終止不了,我們纔會嘗試SIGKILL。
SIGSTOP
停止(stopped)進程的執行. 注意它和terminate以及interrupt的區別:該進程還未結束, 只是暫停執行. 本信號不能被阻塞, 處理或忽略.
添加退出處理邏輯
假設源dockerfile中定義的en