日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

docker 中進程的信號

作者:吉松松 更新時間: 2022-07-09 編程語言

容器中的應用優雅的退出

一、進程的退出 - 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. 容器的 1 號進程為Dockerfile文件中啟動命令進程。

  2. 只有容器中的 1 號進程能夠收到信號。

  3. 如果需要使用容器動態化(即CMD命令為腳本啟動),那么腳本進程就為1號進程 。

    例如:/bin/bash /root/start.sh為1號進程,應用進程為其他級別。

  4. 如果既想容器動態化,又想優雅退出。那么可以由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

欄目分類
最近更新