Оновлення: trap
вимагає видалення SIG
префікса за умови, хоча деякі оболонки підтримують його. Дивіться коментар нижче.
У новому процесі ampersand "&" виконує команду у фоновому режимі. Коли його батьківський процес (команда, яка виконує bash-скрипт у вашому випадку) закінчується, цей фоновий процес скине батьківський процес до init (процес з PID
1), але не загине. Коли ви натискаєте 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
перед тим, як він вийде.