Bash

父程序退出時殺死子程序

  • May 28, 2014

我正在為 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

引用自:https://serverfault.com/questions/599192