当父母退出时终止subprocess

我正在为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完全取代了这个过程

如果你幸运的话,那么你可以使用--pid=<number>选项来使用GNU coreutils的尾部命令。 大写的-F选项会让你安全的对抗日志的旋转。

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

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