在后台子 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
在我的脚本中,我启动了多个后台进程,其中之一是
(
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