Quando dovrei usare "nohup" e quando dovrei usare "&"?


16

Non so mai quando è il momento migliore per usare nohup e il & alla fine del comando.

Risposte:


20

Nohup fa in modo che un programma ignori il segnale HUP, consentendogli di funzionare dopo la chiusura del terminale corrente / disconnessione dell'utente. Nohup non invia il programma in background.
e alla fine del comando è correlato al controllo dei lavori di shell, consentendo all'utente di continuare a lavorare nella sessione di shell corrente.
Di solito nohup e & sono combinati per avviare il programma che viene eseguito dopo il logout dell'utente e consente di continuare a lavorare nella sessione di shell corrente.


13

In genere uso &quando voglio eseguire in background un comando che non richiederà molto tempo per essere eseguito, o uno in cui non mi dispiacerà davvero se il programma viene terminato se mi disconnetto inaspettatamente da una sessione.

xcalc &
rdesktop 1.2.3.4 & 
./this_only_takes_a_few_seconds_but_i_want_my_shell_back.py &

Quando lavoro su una VPN o una connessione remota instabile, tendo a utilizzarlo nohupper eseguire qualsiasi cosa che richieda del tempo per essere eseguita. Quando si eseguono grandi importazioni di dati su un host remoto, ad esempio, è possibile che si desideri utilizzare nohupper assicurarsi che la disconnessione non ti ricomincia da capo quando ti riconnetti.

nohup ./do_data_load.py mydatafile.txt &

Viene anche usato quando uno sviluppatore non demone correttamente un servizio, quindi devi nohupassicurarti che non venga ucciso quando esci.

nohup sillyd &

Se ti capita di dimenticare di usare nohupquando esegui qualcosa come gli ultimi due esempi, puoi usare l'integrato bash o zsh disowncon lo stesso effetto.

$ sillyd &
[1] 12345            # Whoops!
$ disown %1

È piuttosto raro usarlo nohupsenza &, dal momento che non puoi davvero ricollegarti alla sessione nohup'd se sei disconnesso. Questo praticamente elimina la sua utilità per i comandi interattivi. Nel caso in cui si disponga di un comando interattivo che si desidera mantenere su sessioni o evitare disconnessioni complicate, è possibile utilizzare screen. La potenza di fuoco di una screensessione completamente armata e operativa va oltre lo scopo di questo post, quindi dovresti verificarlo più in dettaglio .


Trovo più facile da configurare e utilizzare rispetto allo schermo. Inoltre, con licenza BSD.
Kristaps

1
Puoi anche usare ciò byobuche aggiunge alcune belle funzionalità allo schermo. È disponibile nella maggior parte dei repository apt e nei repository EPEL per Red Hat.
James,

0

nohup: disconnette l'utente corrente, il processo non si fermerà

&: con questo simbolo, non ci sarà output nel terminale corrente, il processo in esecuzione in background


4
ci sarà ancora output, poiché & non rimuove output standard e flussi di errori. devi usare il reindirizzamento dello stream, in questo modo (in bash) comando> / dev / null 2> 1
Kristaps,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.