網站首頁 編程語言 正文
容器中的應用優雅的退出
一、進程的退出 - Linux
1、kill 參數
1 | SIGHUP | 啟動被終止的程序,可讓該進程重新讀取自己的配置文件,類似重新啟動。 |
---|---|---|
2 | SIGINT | 相當于用鍵盤輸入 [ctrl]-c 來中斷一個程序的進行。 |
9 | SIGKILL | 代表強制中斷一個程序的進行,如果該程序進行到一半,那么尚未完成的部分可能會有“半產品”產生,類似 vim會有 .filename.swp 保留下來。 |
15 | SIGTERM | 以正常的方式來終止該程序。由于是正常的終止,所以后續的動作會將他完成。不過,如果該程序已經發生問題,就是無法使用正常的方法終止時,輸入這個 signal 也是沒有用的。 |
19 | SIGSTOP | 相當于用鍵盤輸入 [ctrl]-z 來暫停一個程序的進行。 |
2、信號
信號是一種進程間通信的形式。一個信號就是內核發送給進程的一個消息,告訴進程發生了某種事件。當一個信號被發送給一個進程后,進程會立即中斷當前的執行流并開始執行信號的處理程序。如果沒有為這個信號指定處理程序,就執行默認的處理程序。
進程需要為自己感興趣的信號注冊處理程序,比如為了能讓程序優雅的退出(接到退出的請求后能夠對資源進行清理)一般程序都會處理 SIGTERM 信號。與 SIGTERM 信號不同,SIGKILL 信號會粗暴的結束一個進程。因此我們的應用應該實現這樣的目錄:捕獲并處理 SIGTERM 信號,從而優雅的退出程序。如果我們失敗了,用戶就只能通過 SIGKILL 信號這一終極手段了。除了 SIGTERM 和 SIGKILL ,還有像 SIGUSR1 這樣的專門支持用戶自定義行為的信號
二、容器中的信號
-
容器的 1 號進程為Dockerfile文件中啟動命令進程。
-
只有容器中的 1 號進程能夠收到信號。
-
如果需要使用容器動態化(即CMD命令為腳本啟動),那么腳本進程就為1號進程 。
例如:/bin/bash /root/start.sh為1號進程,應用進程為其他級別。
-
如果既想容器動態化,又想優雅退出。那么可以由DockerDameon發送信號給1號進程,再有1號進程發送給應用進程,實現信號的傳遞。腳本如下:
#!/bin/bash
pid=0
term_handler() {
if [ $pid -ne 0 ]; then
kill -SIGTERM "$pid"
wait "$pid"
fi
exit 143;
}
trap 'kill ${!}; term_handler' SIGTERM
啟動命令 &
pid="$!"
while true
do
tail -f /dev/null & wait ${!}
done
原文鏈接:https://blog.csdn.net/m0_37642477/article/details/125668625
- 上一篇:apt報錯Hash 校驗和不符解決辦法
- 下一篇:Docker可視化、數據持久化
相關推薦
- 2022-10-19 Pandas如何將表格的前幾行生成html實戰案例_python
- 2022-09-08 pandas時間序列之如何將int轉換成datetime格式_python
- 2023-10-15 AddressSanitizer 查找內存問題
- 2023-03-28 python數組如何添加整行或整列_python
- 2022-09-03 C++11?condition_variable條件變量的用法說明_C 語言
- 2022-06-09 LVGL?PC模擬器安裝步驟詳解_安裝教程
- 2023-01-03 c語言malloc函數的用法示例和意義_C 語言
- 2023-12-14 Excel如何把兩列互換
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支