"$THIS_SH" -c ' exit_func() { echo "Removing traps" trap - EXIT TERM INT echo "End of exit_func" } set -e trap exit_func EXIT TERM INT sleep 2 exit 77 ' & sleep 1 # BUG: ash kills -PGRP, but in non-interactive shell we do not create pgrps! # In this case, bash kills by PID, not PGRP. kill -TERM %1 wait echo Done: $?