如何确保使用“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

相关内容