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.
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 arrestano. Qui è dove il nohup
il comando torna utile. Ignora tutti i segnali di interruzione e il processo continuerà a essere eseguito.
Come usare il comando nohup #
La sintassi per nohup
il comando è il seguente:
nohup COMMAND [ARGS]
Il comando non accetta altre opzioni tranne lo standard --help
e --version
.
Diamo un'occhiata al seguente esempio:
nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'
nohup
esegue mycommand
comando in primo piano e reindirizza l'output del comando a nohup.out
file. 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 esci o chiudi il terminale, il processo non viene terminato.
Esecuzione del comando in background #
Usando nohup
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, aggiungi il &
simbolo alla fine del comando:
nohup mycommand &
L'output include l'ID del lavoro della shell (racchiuso tra parentesi quadre) e l'ID del processo:
[1] 25177
Puoi usare l'ID lavoro per portare il comando in primo piano usando fg
comando.
Se per qualche motivo vuoi terminare il processo, usa kill
comando seguito dall'ID del processo:
kill -9 25132
Reindirizzamento dell'output a un file #
Per impostazione predefinita, nohup
reindirizza l'output del comando a nohup.out
file. Se vuoi reindirizzare l'output a un file diverso, usa il reindirizzamento della shell standard.
Ad esempio, per reindirizzare lo standard output e lo standard error a mycommand.out
useresti:
nohup mycommand > mycommand.out 2>&1 &
Per reindirizzare lo standard output e l'errore standard a file diversi:
nohup mycommand > mycommand.out 2> mycommand.err &
Alternative #
Esistono diversi programmi alternativi che puoi utilizzare per evitare che un comando venga terminato quando chiudi il terminale o ti disconnetti.
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 continueranno a essere eseguiti anche se chiudi il terminale.
Rinnega #
disown
è un built-in della shell che rimuove un lavoro della shell dal controllo del lavoro della shell. A differenza di nohup
, puoi usare disown
anche sui processi in esecuzione.
Conclusione #
nohup
ti consente di impedire che i comandi vengano terminati quando ti disconnetti o esci dal terminale.
Se hai domande o feedback, sentiti libero di lasciare un commento.