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