Bash
父程序退出時殺死子程序
我正在為 Docker 準備一個腳本,它只允許一個頂級程序,它應該接收信號,以便我們可以停止它。
因此,我有一個這樣的腳本:一個應用程序寫入 syslog(本範例中的 bash 腳本),而另一個只是列印它。
#! /usr/bin/env bash set -eu tail -f /var/log/syslog & exec bash -c 'while true ; do logger aaaaaaaaaaaaaaaaaaa ; sleep 1 ; done'
幾乎解決了:當頂級程序
bash
獲得 SIGTERM 時——它存在,但tail -f
繼續執行。
tail -f
父程序退出時如何指示退出?例如,它也應該得到信號。注意:不能使用 bash 陷阱,因為
exec
在最後一行完全替換了程序。
如果你很幸運^W使用來自 GNU coreutils 的 tail 命令,你可以使用
--pid=<number>
選項。大寫-F
選項將使您免受日誌輪換的影響。tail --pid="$$" -F /var/log/syslog &
更多資訊:http ://www.gnu.org/software/coreutils/manual/html_node/tail-invocation.html