De man nohup
:
Si la entrada estándar es una terminal, rediríjala desde / dev / null. Si la salida estándar es un terminal, agregue la salida a nohup.out
si es posible, de lo $HOME/nohup.out
contrario. Si el error estándar es un terminal, rediríjalo a la salida estándar. Para guardar la salida en ARCHIVO, use nohup COMMAND > FILE
.
(completamente revisado en función de los comentarios)
Al salir de un shell o cerrar un terminal, los procesos secundarios se enviarán SIGHUP (bloqueo, el nombre se origina desde el momento en que los terminales marcarían en la computadora UNIX) para decirles que el terminal no funciona Ya conectado. Además, cuando finaliza el proceso de shell, se cerrarán las secuencias stdin, stdout y stderr del proceso secundario. Por lo general, esto hace que el proceso del niño muera. Por lo general, esto es bueno porque evita que los procesos se ejecuten sin usuario.
El propósito del nohup
programa es mantener el proceso en ejecución incluso después de que el shell finalice y el terminal se desconecte. Como tal, dirigir su salida al terminal anula completamente el propósito. Mi respuesta original ( nohup COMMAND | cat
) no fue útil porque: cuando el terminal está cerrado, la salida de cat está cerrada y cat muere, lo que rompe la tubería y envía un SIGPIPE al proceso de nohup que lo hace morir. Había respondido la pregunta sin pensar en el propósito.
Para lograr su propósito, ejecute nohup COMMAND > FILE
para seleccionar el nombre del archivo para dirigir la salida. Luego, use tail -f FILE
para ver la salida en un terminal.
De manera similar, se podría usar la siguiente construcción de shell: COMMAND >FILE 2>&1 </dev/null &
para ejecutar un comando cuyas secuencias stdio no estén conectadas al terminal y puedan continuar ejecutándose después de que el terminal se cierre. Además, en zsh, ejecute el shell-builtin disown
para decirle a zsh que abandone el proceso en lugar de matarlo cuando finalice el shell.