'Interagire con' può significare un paio di cose.
Il motivo per cui un programma, avviato alla riga di comando, termina quando termina il terminale, è perché la shell, quando esce, invia a quel processo un segnale HUP il modo, è l'abbreviazione di "riagganciare" e in origine indicava che l'utente aveva riattaccato il modem/il telefono). La risposta predefinita a un segnale HUP è che un processo è terminato, cioè il programma invocato viene chiuso.
I dettagli sono leggermente più laboriosi, ma questa è l'intuizione generale.
Il comando
nohup
indica alla shell di avviare il programma e di farlo in modo che questo segnale HUP sia
ignorato. Cioè, il programma continua dopo le uscite del terminale di invocazione.
È ancora possibile interagire con questo programma inviandolo segnali (vedere di nuovo kill(1)
), ma si tratta di un tipo molto limitato di interazione e dipende dal programma che si sta scrivendo per fare cose sensate quando riceve quei segnali (segnali USR1
e USR2
sono cose utili da intrappolare, se ti piace questo genere di cose). In alternativa, è possibile interagire tramite pipe denominate, o semafori o altri bit di comunicazione tra processi (IPC). Ciò diventa abbastanza veloce.
Sospetto che quello che state cercando, tuttavia, sia in grado di ricollegare un terminale al processo. È un processo piuttosto complicato e applicazioni come screen
fanno cose dietro le quinte opportunamente complicate per farlo accadere.
La cosa nohup
è una sorta di demonizzazione rapida e sporca. La funzione daemon(3)
esegue correttamente la daemonizzazione, eseguendo vari bit di riordino come descritto nella risposta di YePhIcK, per interrompere in modo completo il collegamento con il processo/terminale che lo ha invocato. Puoi interagire con quel processo demonizzato con gli stessi strumenti IPC come sopra, ma non direttamente con un terminale.
fonte
2013-05-22 17:06:39
Perché non ci provi prima? Avvia un processo in background, scollegati e riaccedi e controlla con 'ps' se il processo è ancora in circolazione' – patrix
Questo mi sembra una domanda interessante e utile, che segue. Sospetto che i processi avviati tramite il terminale saranno uccisi quando il terminale verrà ucciso. Onestamente, questo suona come una forchetta per me, non so però, non ho mai avuto bisogno di invocare una forchetta. – Dale
Il processo viene interrotto se si disconnette o si perde la sessione, a meno che non si usi il comando [nohup] (http://en.wikipedia.org/wiki/Nohup) :) ma non si è sicuri se è possibile riprendere il processo una nuova sessione –