Come Eseguire Comandi Bash in Background in Linux

Funzione Comandi in Background

Non c’è niente di più fastidioso che eseguire un comando nel terminale e vederlo funzionare per minuti, a volte ore, senza poter utilizzare di nuovo il terminale. Certo, puoi usare le schede, ma è una soluzione ingombrante e non sempre ottimale perché potresti voler vedere gli aggiornamenti mentre lavori. Qui ti mostriamo alcuni modi diversi per eseguire comandi bash in background in Linux.

Leggi anche: Come Usare il Comando lsof in Linux per Elencare i File Aperti

Termina un Comando con &

Se vuoi spingere un comando in background, usare & alla fine è un modo semplice per farlo. In questo modo, puoi emettere un comando in background e continuare a usare il tuo terminale mentre viene eseguito. C’è però un avvertimento. Usare & non disconnette il comando da te; lo spinge semplicemente in background. Questo significa che mentre stai cercando di usare il terminale, qualsiasi cosa che il comando vuole inviare a STDOUT o STDERR verrà comunque stampata, il che potrebbe essere distraente.

Screenshot Da 2021 01 14 16 21 23

COMMAND &

Quando la sessione del terminale viene chiusa, il comando termina. Puoi anche terminare il comando emettendo il comando jobs, trovando il numero del comando che è in esecuzione e terminandolo con il comando kill. La sintassi è la seguente:

Screenshot Da 2021 01 14 16 21 48

kill %1

Usare & è utile se hai bisogno di spingere qualcosa per un po’, ma non aspettarti che continui per sempre.

Leggi anche: Come Usare il Comando dd in Linux

& Dopo un Comando, Poi Disown

Eseguire un comando con solo & lo spinge indietro e lo mantiene in esecuzione finché la finestra del terminale è aperta. Se, tuttavia, desideri mantenere questo comando in esecuzione in modo costante, anche con la tua sessione terminale che termina, puoi usare il comando disown.

Per usare questo metodo, inizia aggiungendo un &.

COMMAND &

Come accennato sopra, usare & spinge questo comando in background ma non lo stacca dal tuo utente. Puoi verificare questo digitando jobs nel terminale. Mostrerà il comando in esecuzione in background come abbiamo visto prima.

Basta digitare disown nella shell, e farà proprio questo. (E puoi nuovamente verificare questo con il comando jobs.)

Screenshot Da 2021 01 14 16 26 01

Ora puoi chiudere il tuo terminale e continuare la tua giornata. Continuerà a inviare dati a STDOUT o STDERR, ma una volta che esci e riapri il tuo terminale, non vedrai nulla lì. Puoi trovare di nuovo il comando con i comandi top o ps e terminarlo con il comando kill.

Screenshot Da 2021 01 14 16 28 42

Leggi anche: Come Usare il Comando Rm in Linux

& Dopo un Comando con /dev/null

Aggiungere & dopo un comando spingerà un comando in background, ma di conseguenza, il comando in background continuerà a stampare messaggi nel terminale mentre lo stai usando. Se desideri prevenire questo, considera di reindirizzare il comando a /dev/null.

Screenshot Da 2021 01 14 16 31 33

COMMAND &>/dev/null &

Questo non impedisce al comando di chiudersi quando il terminale si chiude. Tuttavia, come accennato sopra, è possibile utilizzare disown per staccare il comando in esecuzione dall’utente. Puoi anche terminarlo in uno dei metodi menzionati sopra se non vuoi che continui a funzionare.

Leggi anche: La Guida Definitiva ai Comandi Apt e Apt-Get

Nohup, con & e /dev/null

A differenza dei comandi precedenti, usare nohup ti consente di eseguire un comando in background e mantenerlo in esecuzione. Come? nohup bypassa il segnale HUP (hang up), rendendo possibile eseguire comandi in background anche quando il terminale è spento. Combina questo comando con il reindirizzamento a “/dev/null” (per prevenire che nohup crei un file nohup.out), e tutto va in background con un solo comando.

nohup COMMAND &>/dev/null &

Screenshot Da 2021 01 14 16 32 43

Leggi anche: Come Generare Certificati SSL su Linux Usando OpenSSL

La maggior parte dei programmi terminali su Linux oggi ha funzionalità integrate per consentire loro di funzionare in background con poco sforzo. Insieme a ciò, i moderni sistemi di init (come systemd) possono consentire agli utenti di avviare programmi come servizi all’avvio o ogni volta che lo desiderano.

Tuttavia, alcuni programmi su Linux mancano della capacità di funzionare come demoni o integrarsi con i moderni sistemi di init. Questo è un vero inconveniente ma è comprensibile, poiché non tutti gli sviluppatori hanno le competenze o il tempo per aggiungere nuove funzionalità.

Fortunatamente, comandi come nohup o disown sono ancora una realtà e possono colmare il divario nel trasferire programmi come questo in background. Non sono perfetti o eleganti, ma fanno il loro lavoro quando necessario.

Se ti è piaciuto questo articolo su Linux, assicurati di dare un’occhiata ad alcuni dei nostri altri contenuti su Linux, come come collegare il tuo account Google a GNOME Shell, le migliori distribuzioni Linux per utenti Windows e i comandi LS che devi conoscere.

Leggi anche: Come Usare cURL per il Trasferimento Dati da Linea di Comando e Altro