Wie kann sichergestellt werden, dass untergeordnete Hintergrundprozesse bei Verwendung von „set -e“ beendet werden?

Wie kann sichergestellt werden, dass untergeordnete Hintergrundprozesse bei Verwendung von „set -e“ beendet werden?
set -e

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

echo "done"
ueoa

Wenn ich dies ausführe, ueoawird es „beendet“, sobald es (einen zufälligen Befehl, der nicht existiert) erreicht, aber weiter ausgeführt while true; do echo "test"; sleep 1; done.

Wie kann ich in diesem Fall sicherstellen, dass auch der Vordergrundprozess beendet wird?

Antwort1

So wie das:

#!/usr/bin/env bash

trap 'kill $(jobs -p)' ERR

set -e

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

echo "done"
ueoa

Antwort2

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

verwandte Informationen