GNU/Linux >> Linux Esercitazione >  >> Linux

Come utilizzare Ctrl+C per terminare tutti i processi in background avviati in uno script Bash?

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.


Linux
  1. Come trovare tutti i processi figlio?

  2. Come uccidere un processo figlio dopo un determinato timeout in Bash?

  3. bash:uccide silenziosamente il processo della funzione in background

  4. Come uccidere tutti i processi con un determinato nome parziale?

  5. Come uccidere tutti i processi in background in zsh?

Come uccidere un processo in Linux? Comandi per terminare

Come uccidere un processo in Linux

Come utilizzare il comando htop per monitorare i processi di sistema in tempo reale

Come uccidere i processi Zombie in Linux

Come inviare processi in background su Linux

Come uccidere i processi zombi in Ubuntu