当父进程退出时终止子进程

当父进程退出时终止子进程

我正在为 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最后一行完全替换了进程。

答案1

如果您很幸运,您可以使用 GNU coreutils 中的 tail 命令--pid=<number>。大写选项-F可让您避免日志轮换。

tail --pid="$$" -F /var/log/syslog &

更多信息:http://www.gnu.org/software/coreutils/manual/html_node/tail-invocation.html

相关内容