在后台子 shell 内的 SIGTERM 上结束尾巴

Ending tail on SIGTERM inside background subshell

在我的脚本中,我启动了多个后台进程,其中之一是

(
  tail -qF -n 0 logs/nginx/*.log
) &
processes[logs]=$!

for process in "${!processes[@]}"; do
  wait "${processes[$process]}"
done

当发送 SIGTERM 信号时,所有进程结束,只剩下尾巴 运行。经过一些测试后,我想出了将 tail 发送到后台及其工作的解决方案。

(
  tail -qF -n 0 logs/nginx/*.log &
) &
processes[logs]=$!

for process in "${!processes[@]}"; do
  wait "${processes[$process]}"
done

有人可以向我解释当我在子 shell 中将 tail 发送到后台时发生了什么,以便在 SIGTERM 到达时结束吗?

在我提供的示例中我的尾巴没有被杀死,它只是被发送到后台并允许脚本退出。

我已将 tail 附加到我的服务器,因此在我的服务器死机后,tail 也会死机。现在它的行为如我所愿。

tail -qF -n 0 --pid=${process_list[server]} logs/nginx/*.log