Tl; dr:
Perché il sleepprocesso può sopravvivere quando esco e il terminale è chiuso? Nella mia mente, tutto tranne i demoni e i nohupprogrammi verranno uccisi durante il logout. Se sleepriesco a sopravvivere in questo modo, significa che posso usare questo metodo invece del nohupcomando?
A meno che l' bashistanza generata da non sshabbia l' huponexitopzione impostata, nessun processo verrà terminato in alcun modo all'uscita / disconnessione e quando l' huponexitopzione è impostata, l'uso kill -9sulla shell non è una buona alternativa all'utilizzo nohupsui processi figlio della shell; nohupsui processi figlio della shell li proteggerà comunque dai SIGHUP che non provengono dalla shell e anche quando ciò non nohupè importante è ancora preferibile perché consente alla shell di essere terminata con grazia.
In bashc'è un'opzione chiamata huponexit, che se impostata renderà bashSIGHUP i suoi figli all'uscita / logout;
Nelle istanze interattive senza accesso bash , come in bashun'istanza generata da gnome-terminal, questa opzione viene ignorata; se huponexitimpostato o non impostato, bashi bambini non saranno mai SIGHUPPassati bashall'uscita;
Nelle istanze di login interattive bash, come in bashun'istanza generata da ssh, questa opzione non viene ignorata (tuttavia non è impostata per impostazione predefinita); se huponexitimpostato, bashi bambini verranno SIGHUPpuliti bashall'uscita / logout; se huponexitnon è impostato, bashi bambini non verranno SIGHUPpuliti bashall'uscita / logout;
Quindi, in generale, uscire / disconnettersi da bashun'istanza di login interattiva , a meno che non huponexitsia impostata l' opzione, non farà della shell SIGHUP i suoi figli, e uscire / disconnettersi da bashun'istanza non di login interattiva non farà della shell SIGHUP i suoi figli indipendentemente;
Questo, tuttavia, è irrilevante in questo caso: l'utilizzo kill -9 sleepsopravviverà a prescindere, perché uccidere il suo processo genitore ( bash) non lascerà la possibilità a quest'ultimo di fare qualcosa al primo (cioè, ad esempio, se l' bashistanza corrente fosse bashun'istanza di accesso e l' huponexitopzione è stata impostata su SIGHUP it).
In aggiunta a questo, a differenza di altri segnali (come un segnale SIGHUP inviato a bash), un segnale SIGKILL non viene mai propagato ai processi figlio di un processo, quindi sleepnon viene nemmeno ucciso;
nohupavvia un processo immune ai segnali SIGHUP, che è qualcosa di diverso; eviterà che il processo si interrompa alla ricezione di un segnale SIGHUP, che in questo caso potrebbe essere ricevuto dall'istanza di accesso interattivo bashnel caso in cui l' huponexitopzione fosse impostata e la shell uscisse; quindi tecnicamente l'utilizzo nohupper avviare un processo in bashun'istanza di login interattiva con l' huponexitopzione unset impedirà al processo di riagganciare alla ricezione di un segnale SIGHUP, ma uscire / disconnettersi dalla shell non lo SIGHUP indipendentemente;
In generale, tuttavia, quando nohupè necessario per impedire che i segnali SIGHUP provengano dalla shell genitore, non c'è motivo di preferire il kill -9metodo on sul genitore al metodo nohupon sul figlio; invece, dovrebbe essere il contrario.
Uccidere il genitore usando il kill -9metodo non lascia al genitore la possibilità di uscire con garbo, mentre l'avvio del figlio usando il nohupmetodo consente al genitore di essere chiuso da altri segnali, come SIGHUP (per fare un esempio che ha senso nel contesto di un bambino ha iniziato a utilizzare nohup), che gli consente di uscire con grazia.
&eseguirà il fork del processo in background (come daemon) e continuerà a funzionare anche se si è disconnessi.