Оновлення: trapвимагає видалення SIGпрефікса за умови, хоча деякі оболонки підтримують його. Дивіться коментар нижче.
У новому процесі ampersand "&" виконує команду у фоновому режимі. Коли його батьківський процес (команда, яка виконує bash-скрипт у вашому випадку) закінчується, цей фоновий процес скине батьківський процес до init (процес з PID1), але не загине. Коли ви натискаєте ctrl+c, ви надсилаєте сигнал переривання на передній план, і це не вплине на фоновий процес.
Для того щоб вбити фоновий процес, вам слід скористатися killкомандою з PIDостаннім фоновим процесом, який може бути отриманий $!.
Якщо ви хочете використовувати ctrl+cдля вбивства і сценарій, і фоновий процес, ви можете зробити це:
trap 'kill $BGPID; exit' INT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
trapмодифікує обробник пастки SIGINT( trapвимагає видалення SIGпрефікса, але деякі оболонки можуть підтримувати його), так що сценарій буде вбивати процес $BGPIDперед тим, як він вийде.