Aggiornamento:trap
richiede la rimozione di SIG
prefisso a condizione, sebbene alcune shell lo supportino. Vedi commento sotto.
La e commerciale "&" esegue un comando in background in un nuovo processo. Quando il suo processo genitore (il comando che esegue lo script bash nel tuo caso) termina, questo processo in background ripristinerà il suo processo genitore su init (processo con PID
1), ma non morirà. Quando premi ctrl+c
, stai inviando un segnale di interruzione al processo in primo piano e non influirà sul processo in background.
Per terminare il processo in background, dovresti usare il kill
comando con PID
del processo in background più recente, che potrebbe essere ottenuto da $!
.
Se vuoi utilizzare ctrl+c
per terminare sia lo script che il processo in background, puoi fare questo:
trap 'kill $BGPID; exit' INT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
trap
modifica il gestore trap del SIGINT
(trap
richiede la rimozione del SIG
prefisso ma alcune shell potrebbero supportare l'inclusione) quindi lo script terminerà il processo con $BGPID
prima che esca.