Il comando nohup
esegue un altro programma specificato come argomento e ignora tutti i segnali SIGHUP
(hangup). 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 si disconnette, la sessione viene terminata e tutti i processi eseguiti dal terminale si fermeranno. È qui che il comandonohup
è utile., Ignora tutti i segnali di hangup e il processo continuerà a funzionare.
Come Utilizzare il Comando nohup #
La sintassi per il nohup
comando è il seguente:
nohup COMMAND
Il comando non accettare eventuali altre opzioni, ad eccezione delle --help
e --version
.,
diamo un’occhiata al seguente esempio:
nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'
nohup
funziona mycommand
comando in primo piano e reindirizza l’output del comando per il nohup.out
file. Questo file viene creato nella directory di lavoro corrente . Se l’utente che esegue il comando non dispone delle autorizzazioni di scrittura per la directory di lavoro, il file viene creato nella directory home dell’utente.
Se si disconnette o si chiude il terminale, il processo non viene terminato.,
Eseguire il comando in Background #
Usarenohup
in 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 , aggiungere il &
simbolo alla fine del comando:
nohup mycommand &
L’output include la shell ID di processo (racchiuso tra parentesi quadre) e l’ID di processo:
25177
È possibile utilizzare l’ID di processo per portare il comando in primo piano utilizzando il fg
comando.,
Se per qualche motivo si desidera terminare il processo, utilizzare il tag kill
comando seguito da l’ID di processo:
kill -9 25132
Reindirizzare l’Output in un File #
per impostazione predefinita, nohup
reindirizza l’output del comando per il nohup.out
file. Se si desidera reindirizzare l’output a un file diverso, utilizzare il reindirizzamento della shell standard.,
Per esempio, per reindirizzare lo standard output e lo standard error mycommand.out
si usa:
nohup mycommand > mycommand.out 2>&1 &
Per reindirizzare lo standard output e lo standard error file diversi:
nohup mycommand > mycommand.out 2> mycommand.err &
Alternative #
Ci sono diversi programmi alternativi che è possibile utilizzare per evitare un comando per essere terminato quando si chiude il terminale o disconnesso.,
Screen #
Screen o GNU Screen è un programma multiplexer terminale che permette di avviare una sessione di schermo e aprire qualsiasi numero di finestre (terminali virtuali) all’interno di quella sessione. I processi in esecuzione nella schermata continueranno a funzionare quando la loro finestra non è visibile anche se ti disconnetti.
Tmux #
Tmux è un’alternativa moderna alla schermata GNU. Con Tmux, è anche possibile creare una sessione e aprire più finestre all’interno di quella sessione. Le sessioni Tmux sono persistenti, il che significa che i programmi in esecuzione in Tmux continueranno a funzionare anche se si chiude il terminale.,
Disown #
disown
è una shell incorporata che rimuove un lavoro della shell dal controllo del lavoro della shell. A differenza di nohup
, è possibile utilizzare disown
anche sui processi in esecuzione.
Conclusione #
nohup
consente di evitare che i comandi vengano terminati quando si disconnette o esce dal terminale.