O e comercial "&" executa um comando em segundo plano em um novo processo. Quando seu processo pai (o comando que executa o script bash no seu caso) terminar, esse processo em segundo plano redefinirá seu processo pai para init (processo com PID
1), mas não morrerá. Quando você pressiona ctrl+c
, você está enviando um sinal de interrupção para o processo em primeiro plano, e isso não afetará o processo em segundo plano.
Para eliminar o processo em segundo plano, você deve usar o comando kill
com o PID
do processo em segundo plano mais recente, que pode ser obtido por $!
.
Se você quiser usar ctrl+c
para matar o script e o processo em segundo plano, faça o seguinte:
trap 'kill $BGPID; exit' SIGINT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
trap
modifica o manipulador de traps do SIGINT
, então o script mata o processo com $BGPID
antes de sair.