GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire i comandi Linux in background

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:

  1. Interrompi il processo digitando Ctrl+Z .
  2. 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.


Linux
  1. Come usare il comando Su in Linux

  2. Comandi Linux dalla A alla Z

  3. Comando eco di Linux

  4. Come limitare i comandi utente in Linux

  5. Come eseguire uno script in background (linux openwrt)?

Come richiamare facilmente i comandi Linux dimenticati

Come correggere facilmente i comandi Bash errati in Linux

Come controllare la cronologia dei comandi di Linux in base alle date

Come eseguire periodicamente un comando in Linux usando Watch

Come eseguire più comandi Linux in un unico comando

Come eseguire più comandi Linux contemporaneamente nel terminale Linux