Как обеспечить завершение дочерних фоновых процессов при использовании `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

Связанный контент