Qual è la differenza tra nohup ed e commerciale

Entrambi nohup myprocess.out & o myprocess.out & impostare myprocess.out per l’esecuzione in background. Dopo aver spento il terminale, il processo è ancora in esecuzione. Qual è la differenza tra loro?

nohup rileva il segnale di hangup (vedi il segnale man 7 signal ) mentre la e commerciale non lo fa (tranne che la shell è configurata in quel modo o non invia SIGHUP affatto).

Normalmente, quando si esegue un comando usando & e terminando la shell in seguito, la shell terminerà il sottocomando con il segnale di blocco ( kill -SIGHUP ). Questo può essere evitato usando nohup , in quanto cattura il segnale e lo ignora in modo che non raggiunga mai l’applicazione effettiva.

Nel caso in cui stai usando bash, puoi usare il comando shopt | grep hupon shopt | grep hupon per scoprire se la tua shell invia SIGHUP ai suoi processi figli o meno. Se è spento, i processi non verranno terminati, come sembra essere il tuo caso. Ulteriori informazioni su come bash termina le applicazioni possono essere trovate qui .

Ci sono casi in cui nohup non funziona, ad esempio quando il processo che ricominci ricollega il segnale SIGHUP , come è il caso qui .

myprocess.out & avremmo eseguito il processo in background usando una subshell. Se la shell corrente viene terminata (ad esempio in uscita dal logout), anche tutte le subshell vengono terminate, quindi anche il processo in background verrebbe chiuso. Il comando nohup ignora il segnale HUP e quindi anche se la shell corrente è terminata, la subshell e il myprocess.out continuerebbero a funzionare in background. Un’altra differenza è che & solo non reindirizza lo stdout / stderr, quindi se ci sono output o errori, questi vengono visualizzati sul terminale. nohup d’altra parte reindirizza lo stdout / stderr su nohup.out o $ HOME / nohup.out.

L’uso della e commerciale (&) eseguirà il comando in un processo figlio (secondario alla sessione di bash corrente). Tuttavia, quando si esce dalla sessione, tutti i processi figli verranno uccisi.

usare nohup + e commerciale (&) farà la stessa cosa, tranne che quando la sessione termina, il genitore del processo figlio verrà cambiato in “1”, che è il processo “init”, preservando così il bambino dall’essere ucciso.

Il più delle volte effettuiamo il login al server remoto usando ssh. Se si avvia uno script di shell e si esegue il logout, il processo viene interrotto. Nohup aiuta a continuare a eseguire lo script in background anche dopo aver effettuato il logout dalla shell.

 Nohup command name & eg: nohup sh script.sh & 

Nohup rileva i segnali HUP. Nohup non inserisce automaticamente il lavoro in background. Dobbiamo dire che l’uso esplicito e

Correggimi se sbaglio

  nohup myprocess.out & 

nohup rileva il segnale di disconnessione, il che significa che invierà un processo alla chiusura del terminale.

  myprocess.out & 

Il processo può essere eseguito ma verrà arrestato una volta chiuso il terminale.

 nohup myprocess.out 

Processo in grado di eseguire anche terminali chiusi, ma è ansible interrompere il processo premendo ctrl + z nel terminale. Crt + z non funziona se & è esistente.

Il comando nohup è un’utilità di mascheramento del segnale e rileva il segnale di blocco. Dove come e commerciale non cattura i segnali di blocco. La shell terminerà il comando secondario con il segnale di disconnessione quando si esegue un comando usando & ed uscendo dalla shell. Questo può essere evitato usando nohup, mentre prende il segnale. Il comando Nohup accetta il segnale di sospensione che può essere inviato ad un processo dal kernel e bloccarlo. Il comando Nohup è utile quando un utente desidera avviare l’esecuzione prolungata della sessione o chiudere la finestra in cui è stato avviato il processo. Una di queste azioni normalmente richiede al kernel di riagganciare all’applicazione, ma un wrapper nohup consentirà al processo di continuare. Utilizzando la e commerciale verrà eseguito il comando in un processo figlio e questo figlio della sessione bash corrente. Quando esci dalla sessione, tutti i processi figli di quel processo verranno uccisi. La e commerciale si riferisce al controllo del lavoro per la shell triggers. Questo è utile per eseguire un processo in una sessione in background.