「set -e」を使用するときに子バックグラウンドプロセスが終了したかどうかを確認する方法は?

「set -e」を使用するときに子バックグラウンドプロセスが終了したかどうかを確認する方法は?
set -e

while true; do echo "test"; sleep 1; done &

echo "done"
ueoa

これを実行すると、一度到着するとueoa(存在しない任意のコマンド)「終了」しますが、実行が継続されますwhile true; do echo "test"; sleep 1; done

この場合、フォアグラウンドプロセスも終了したことをどのように確認できますか?

答え1

そう:

#!/usr/bin/env bash

trap 'kill $(jobs -p)' ERR

set -e

while true; do echo "test"; sleep 1; done &

echo "done"
ueoa

答え2

#!/bin/bash
set -e
function cleanup()
{
    kill $!
}
trap cleanup ERR
while true; do echo "test"; sleep 1; done &
echo "done"
ueoa

関連情報