In genere, quando si esegue un comando nel terminale, è necessario attendere fino al termine del comando prima di poterne inserire un altro. Questo è chiamato esecuzione del comando nel processo in primo piano o in primo piano. Quando un processo viene eseguito in primo piano, occupa la tua shell e puoi interagire con esso utilizzando i dispositivi di input.
Cosa succede se il comando impiega molto tempo per terminare e si desidera eseguire altri comandi nel frattempo? Hai diverse opzioni a tua disposizione. L'opzione più ovvia e semplice è quella di avviare una nuova sessione di shell ed eseguire il comando al suo interno. Un'altra opzione è eseguire il comando in background.
Un processo in background è un processo/comando che viene avviato da un terminale e viene eseguito in background, senza interazione da parte dell'utente.
In questo articolo parleremo dei processi in background sia Linux. Ti mostreremo come avviare un comando in background e come mantenere il processo in esecuzione dopo la chiusura della sessione della shell.
Esegui un comando Linux in background #
Per eseguire un comando in background, aggiungi il simbolo e commerciale (&
) alla fine del comando:
command &
L'ID del lavoro shell (racchiuso tra parentesi) e l'ID del processo verranno stampati sul terminale:
[1] 25177
Puoi avere più processi in esecuzione in background contemporaneamente.
Il processo in background continuerà a scrivere messaggi sul terminale da cui hai invocato il comando. Per sopprimere lo stdout
e stderr
i messaggi utilizzano la seguente sintassi:
command > /dev/null 2>&1 &
>/dev/null 2>&1
significa reindirizzare stdout
a /dev/null
e stderr
a stdout
.
Usa i jobs
utilità per visualizzare lo stato di tutti i lavori interrotti e in background nella sessione della shell corrente:
jobs -l
L'output include il numero del lavoro, l'ID del processo, lo stato del lavoro e il comando che ha avviato il lavoro:
[1]+ 25177 Running ping google.com &
Per portare un processo in background in primo piano, usa fg
comando:
fg
Se hai più lavori in background, includi %
e l'ID lavoro dopo il comando:
fg %1
Per terminare il processo in background, usa kill
comando seguito dall'ID del processo:
kill -9 25177
Sposta un processo in primo piano in background #
Per spostare in background un processo in esecuzione in primo piano:
- Interrompi il processo digitando
Ctrl+Z
. - Sposta in background il processo interrotto digitando
bg
.
Mantieni in esecuzione i processi in background dopo l'uscita da una shell #
Se la connessione si interrompe o ci si disconnette dalla sessione della shell, i processi in background vengono terminati. Esistono diversi modi per mantenere il processo in esecuzione al termine della sessione della shell interattiva.
Un modo è rimuovere il lavoro dal controllo del lavoro della shell usando disown
shell incorporata:
disown
Se hai più di un lavoro in background, includi %
e l'ID lavoro dopo il comando:
disown %1
Conferma che il lavoro è stato rimosso dalla tabella dei lavori attivi utilizzando jobs -l
comando. Per elencare tutti i processi in esecuzione, inclusi quelli disconosciuti, usa ps aux
comando.
Un altro modo per mantenere in esecuzione un processo dopo l'uscita dalla shell è usare nohup
.
Il nohup
comando esegue un altro programma specificato come argomento e ignora tutti i SIGHUP
(riagganciare) segnali. SIGHUP
è un segnale che viene inviato a un processo quando il suo terminale di controllo è chiuso.
Per eseguire un comando in background usando nohup
comando, digita:
nohup command &
L'output del comando viene reindirizzato a nohup.out
file.
nohup: ignoring input and appending output to 'nohup.out'
Se esci o chiudi il terminale, il processo non viene terminato.
Alternative #
Esistono numerosi programmi che ti consentono di avere più sessioni interattive contemporaneamente.
Schermata #
Screenor GNU Screen è un programma multiplexer di terminali che consente di avviare una sessione di schermo e aprire un numero qualsiasi di finestre (terminali virtuali) all'interno di quella sessione. I processi in esecuzione in Screen continueranno a essere eseguiti quando la loro finestra non è visibile anche se vieni disconnesso.
Tmux #
Tmux è una moderna alternativa allo schermo GNU. Con Tmux, puoi anche creare una sessione e aprire più finestre all'interno di quella sessione. Le sessioni di Tmux sono persistenti, il che significa che i programmi in esecuzione in Tmux continuano a essere eseguiti anche se si chiude il terminale.
Conclusione #
Per eseguire un comando in background, includi &
alla fine del comando.
Quando esegui un comando in background, non devi aspettare che finisca prima di poterne eseguire un altro.
Se hai domande o feedback, sentiti libero di lasciare un commento.