Tl; dr:
¿Por qué puede sleepsobrevivir el proceso cuando salgo y el terminal está cerrado? En mi opinión, todo, excepto los demonios y los nohupprogramas, se eliminarán durante el cierre de sesión. Si sleeppuede sobrevivir de esta manera, ¿significa que puedo usar este método en lugar del nohupcomando?
A menos que la bashinstancia generada sshtenga la huponexitopción establecida, ningún proceso terminará por ningún medio al salir / cerrar sesión, y cuando la huponexitopción está configurada, el uso kill -9en el shell no es una buena alternativa al uso nohupen los procesos secundarios del shell; nohupen los procesos secundarios del shell aún los protegerá de SIGHUPs que no provienen del shell, e incluso cuando eso no nohupes importante, todavía es preferible porque permite que el shell finalice con gracia.
En bashhay una opción llamada huponexit, que si se establece hará bashSIGHUP sus hijos al salir / cerrar sesión;
En las bash instancias interactivas sin inicio de sesión , como en una bashinstancia generada por gnome-terminal, esta opción se ignora; ya huponexitsea que esté activado o desactivado, bashlos niños nunca serán VISTOS bashal salir;
En instancias de inicio de sesión interactivas bash, como en una bashinstancia generada por ssh, esta opción no se ignora (sin embargo, no está activada de forma predeterminada); si huponexitestá configurado, bashlos hijos de SIGHUP se verán bashal salir / cerrar sesión; si no huponexitestá configurado, bashlos hijos de 'SIGHUP' no se verán bashal salir / cerrar sesión;
Por lo tanto, en general, salir / cerrar sesión de una bashinstancia de inicio de sesión interactiva , a menos que se establezca la huponexitopción, no hará que el shell SIGHUP sea secundario, y salir / cerrar sesión de una bashinstancia interactiva sin inicio de sesión no hará que el shell SIGHUP sea secundario sin importar;
Sin embargo, esto es irrelevante en este caso: el uso kill -9 sleepsobrevivirá independientemente, porque matar su proceso padre ( bash) no dejará una oportunidad para que el último haga nada al primero (es decir, por ejemplo, si la bashinstancia actual era una bashinstancia de inicio de sesión y huponexitse configuró la opción, SIGHUP it).
Además de esto, a diferencia de otras señales (como una señal SIGHUP enviada a bash), una señal SIGKILL nunca se propaga a los procesos secundarios de un proceso, por sleeplo tanto, ni siquiera se elimina;
nohupinicia un proceso inmune a las señales SIGHUP, que es algo diferente; evitará que el proceso se cuelgue al recibir una señal SIGHUP, que en este caso podría ser recibida por la bashinstancia de inicio de sesión interactiva en caso de que huponexitse estableciera la opción y se cerrara el shell; por lo que, técnicamente, usar nohuppara iniciar un proceso en una bashinstancia de inicio de sesión interactiva con la huponexitopción deshabilitada evitará que el proceso se cuelgue al recibir una señal SIGHUP, pero salir / cerrar sesión del shell no lo SIGHUP independientemente;
Sin embargo, en general, cuando nohupse necesita para evitar que las señales SIGHUP provengan del shell principal, no hay razón para preferir el kill -9método principal al método nohupsecundario; en cambio, debería ser lo contrario.
Matar al padre usando el kill -9método no deja una oportunidad para que el padre salga con gracia, mientras que al comenzar el niño usando el nohupmétodo permite que el padre sea terminado por otras señales, como SIGHUP (para hacer un ejemplo que tenga sentido en el contexto de un niño comenzó a usar nohup), lo que le permite salir con gracia.
&bifurcará el proceso en segundo plano (como daemon) y seguirá ejecutándose aunque haya cerrado la sesión.