Quando eseguo questi quattro comandi su Xubuntu 16.04, localmente o tramite ssh, sembrano tutti fare esattamente la stessa cosa:
export DISPLAY=:0.0 #not necessary unless you have logged in over ssh instead of starting a terminal locally
-
gedit &
-
gedit & disown
-
nohup gedit
-
nohup gedit & disown
Non lo so ottieni la differenza tra gedit &
e gedit & disown
perché se uccido il terminale genitore o esco da una sessione ssh, sembrerebbe che gedit è “rinnegato” in entrambi gli scenari.
Per quanto riguarda due e tre, lunica differenza che vedo è che loutput del comando viene registrato in un file separato e continuerà a essere registrato in quel registro separato anche se la sessione di shell originale che ha generato il processo bg viene interrotta.
Per quanto riguarda tre e quattro, continuo a leggere che cè una differenza tecnica, ma non riesco a capire perché dovresti preferire uno rispetto allaltro.
Quale dovrei usare? Ho visto tutti e quattro i comandi utilizzati nei tutorial e Q & As, e nonostante alcune risposte davvero ottime che descrivono le differenze tecniche tra nohup e disown, non riesco a ottenere una chiara raccomandazione (tranne forse per scopi di registrazione o compatibilità con la shell) per quale dovrei usare.
Commenti
- Hai bisogno di & in tutti i casi in cui vuoi continuare nella shell (e il programma non esegue il fork da solo). Potrebbe non essere necessario nohup per i programmi che chiudono i descrittori di file e si dissociano (questo vale per la maggior parte delle applicazioni GUI). Puoi usare disown dopo il fatto (se non dimentichi nohup) e come scritto prima che le app GUI non ne abbiano bisogno.
Rispondi
Quando devo eseguire uno script che verrà eseguito per un lungo , e io” m on una ssh
sessione, desidero:
-
Lattività dovrebbe continuare anche quando la rete si interrompe o quando impacco il laptop e me ne vado .
a. Lattività può terminare senza il mio intervento interattivo.
nohup do_my_stuff &
b. Lattività potrebbe richiedere qualcosa da me su stdin .
man tmux history -w tmux do_my_stuff
-
Il processo in background in qualche modo migliora la mia sessione corrente e dovrebbe morire insieme alla sessione. Una rarità.
enhance_my_session >>/tmp/enhance.$$.log 2>&1 &
-
Voglio che la cosa sputi alcuni log in modo casuale durante la mia sessione SSH. Aspetta, cosa? No, non lo vorrei mai. Grazie
disown
. -
Unaltra cosa che non voglio mai: convertire il processo a un demone completamente scollegato, ma evita di avviarlo automaticamente al prossimo avvio. Non lo vorrei mai perché non posso prevedere quando il sistema si riavvierà e chi lo riavvierà.
Risposta
In genere, faccio semplicemente quanto segue:
-
myprog &
se voglio solo eseguire qualcosa in background da la mia attuale shell di login. Questo è sufficiente per me il 99% delle volte … -
nohup myprog > /my/path/output.txt &
se avvio qualcosa dalla shell, ma voglio disconnettersi in seguito (magari mentre lattività in background è ancora in esecuzione).
Answer
Tu deve distinguere luscita dalla shell dallannullare il terminale.
- La shell uccide tutti i lavori conosciuti (ma non i loro figli) quando riceve un segnale di interruzione.
- Il terminale uccide tutto ciò per cui era il terminale di controllo.
In generale la soluzione migliore (a livello di utente) IMHO è screen
.
Se la tua attività è piuttosto correlata al sistema che allutente, potresti renderla un servizio systemd invece che avvii manualmente.