如何確保使用「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

相關內容