COMANDO : NOHUP

()

NOHUP

Il comando nohup esegue un altro programma specificato come argomento e ignora tutti i SIGHUPsegnali (riaggancio). SIGHUPè un segnale che viene inviato a un processo quando il suo terminale di controllo è chiuso.

Di solito, quando si esegue un programma su SSH, se la connessione si interrompe o ci si disconnette, la sessione viene terminata e tutti i processi eseguiti dal terminale si fermeranno. Qui è dove il comando nohup torna utile.
Ignora tutti i segnali di riaggancio e il processo continuerà a essere eseguito.

Come usare il comando nohup


La sintassi del nohupcomando è la seguente:

nohup COMMAND [ARGS]

Il comando non accetta altre opzioni tranne lo standard –helpe –version.

Diamo un’occhiata al seguente esempio:

$ nohup mycommand

nohup: ignoring input and appending output to ‘nohup.out’

nohup esegue il comando mycommand in primo piano e reindirizza l’output del comando al nohup.outfile. Questo file viene creato nella directory di lavoro corrente . Se l’utente che esegue il comando non dispone dei permessi di scrittura nella directory di lavoro, il file viene creato nella directory home dell’utente.

Se ci si disconnette o si chiude il terminale, il processo non viene terminato.

Esecuzione del comando in background

L’uso nohupin primo piano non è molto utile perché non sarai in grado di interagire con la shell fino al completamento del comando.

Per eseguire il comando in background , aggiungi il &simbolo alla fine del comando:

$ nohup mycommand &

L’output include l’ID del processo shell (racchiuso tra parentesi quadre) e l’ID del processo:

[1] 25177

È possibile utilizzare l’ID lavoro per portare il comando in primo piano utilizzando il fgcomando. Se per qualche motivo vuoi terminare il processo, usa il killcomando seguito dall’ID del processo:

kill -9 25132

Reindirizzare l’output su un file


Per impostazione predefinita, nohupreindirizza l’output del comando al nohup.outfile. Se vuoi reindirizzare l’output su un file diverso, usa il reindirizzamento standard della shell. Ad esempio, per reindirizzare l’output standard e l’errore standard a mycommand.outdovresti usare:

$ nohup mycommand > mycommand.out 2>&1 &

Per reindirizzare l’output standard e l’errore standard su file diversi:

$ nohup mycommand > mycommand.out 2> mycommand.err &

Alternative


Esistono diversi programmi alternativi che è possibile utilizzare per evitare che un comando venga terminato quando si chiude il terminale o si viene disconnessi.

Screen

Screen o GNU Screen è un programma multiplexer di terminale 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 ti disconnetti.

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 continueranno a essere eseguiti anche se chiudi il terminale.

Disown
disown è un builtin della shell che rimuove un lavoro della shell dal controllo del lavoro della shell. A differenza di nohup, puoi usarlo anche disownsui processi in esecuzione.

Conclusione
nohup consente di impedire che i comandi vengano terminati quando ci si disconnette o si esce dal terminale.

Se hai domande o feedback, non esitare a lasciare un commento.

/ 5
Grazie per aver votato!

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?