Амперсанд "&" запускает команду в фоновом режиме в новом процессе. Когда его родительский процесс (команда, которая запускает скрипт 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
до его выхода.