Амперсанд "&" запускает команду в фоновом режиме в новом процессе. Когда его родительский процесс (команда, которая запускает скрипт bash в вашем случае) завершается, этот фоновый процесс сбросит свой родительский процесс на init (процесс с PID 1), но не умрет. Когда вы нажимаете ctrl+c , вы отправляете сигнал прерывания на передний план процесса, и он не влияет на фоновый процесс.
Чтобы убить фоновый процесс, вы должны использовать команду kill с PID самого последнего фонового процесса, который можно получить с помощью $! ,
Если вы хотите использовать ctrl+c для уничтожения как скрипта, так и фонового процесса, вы можете сделать это:
trap 'kill $BGPID; exit' SIGINT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
trap изменяет обработчик trap-сообщения SIGINT чтобы скрипт завершал процесс с $BGPID до его выхода.