`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

関連情報