Leí una respuesta de un usuario que afirmó que ejecuta
foo 2>&1 >& output.log &
resultaría en foo
continuar ejecutándose incluso cuando cierren sesión. Según este usuario, esto incluso funcionó a través de conexiones SSH.
Realmente no creía eso, ya que tenía la impresión de que en el caso de desconectarse de SSH o terminar el TTY, el shell y, por lo tanto, sus procesos recibirían un SIGHUP, lo que provocaría que finalizaran. Esto, bajo mi suposición, fue la única razón para usar nohup
en tales casos, o tmux
, screen
et al.
Luego busqué en el manual de glibc :
Esta señal también se usa para informar la terminación del proceso de control en un terminal a los trabajos asociados con esa sesión; Esta terminación desconecta efectivamente todos los procesos en la sesión del terminal de control.
Esto parece confirmar mis pensamientos. Pero mirando más allá, dice :
Si el proceso es un líder de sesión que tiene un terminal de control, se envía una señal SIGHUP a cada proceso en el trabajo en primer plano, y el terminal de control se disocia de esa sesión.
Entonces, ¿esto significa que los trabajos puestos en segundo plano no recibirán SIGHUP?
Para mi mayor confusión, ejecuté una sesión interactiva de Zsh, ejecuté yes >& /dev/null &
y exit
escribí, cuando Zsh me advirtió que tenía trabajos en ejecución, y después de escribir exit
por segunda vez, me dijo que había AUMENTADO un trabajo. Hacer exactamente lo mismo en Bash deja el trabajo en marcha ...
logout
yyes
todavía se está ejecutando.