#!/bin/sh set -e kill_child_jobs() { echo "In kill_child_jobs()..." # From https://stackoverflow.com/a/23336595 # Kills all child processes, not just jobs. pkill -P $$ } cleanup() { kill_child_jobs } # From https://unix.stackexchange.com/a/240736 for sig in INT QUIT HUP TERM; do trap " cleanup trap - $sig EXIT kill -s $sig "'"$$"' "$sig" done trap cleanup EXIT yes aa & yes disowned & builtin disown || true sleep 100 & wait