'Interactuar con' puede significar un par de cosas.
La razón por la cual un programa, iniciado en la línea de comandos, finaliza cuando termina, es porque el shell, cuando sale, envía ese proceso una señal HUP (consulte la documentación para kill(1)
para una introducción; HUP, por el camino, es la abreviatura de 'cuelgue', e indicó originalmente que el usuario había colgado el módem/teléfono). La respuesta predeterminada a una señal HUP es que un proceso finaliza; es decir, el programa invocado sale.
Los detalles son un poco más complicados, pero esta es la intuición general.
El comando nohup
le dice al shell que inicie el programa, y para hacerlo de modo que esta señal HUP sea ignorada. Es decir, el programa continúa después de que sale la terminal de invocación.
Aún puede interactuar con este programa enviándole señales (consulte kill(1)
nuevamente), pero este es un tipo de interacción muy limitado, y depende de que su programa esté escrito para hacer cosas sensibles cuando recibe esas señales (señales USR1
y USR2
son cosas útiles para atrapar, si te gustan ese tipo de cosas). Alternativamente, puede interactuar a través de conductos con nombre, semáforos u otros bits de comunicación entre procesos (IPC). Eso se pone un poco complicado rápidamente.
Sospecho que lo que está buscando, sin embargo, es poder volver a conectar una terminal al proceso. Es un proceso bastante más complicado, y las aplicaciones como screen
hacen cosas complicadas detrás de escena para que eso suceda.
La cosa nohup
es una especie de daemonización rápida y sucia. La función daemon(3)
realiza la daemonización 'correctamente', haciendo varios trozos de ordenación como se describe en la respuesta de YePhIcK, para romper de forma integral el vínculo con el proceso/terminal que la invocó. Puede interactuar con ese proceso desmantelado con las mismas herramientas de IPC que antes, pero no directamente con un terminal.
¿Por qué no te pruebas primero? Comience un proceso en segundo plano, cierre la sesión y vuelva a ingresar y compruebe con 'ps' si el proceso aún está activo' – patrix
Esto me parece una pregunta interesante y útil. Sospecho que los procesos iniciados a través de la terminal se eliminarán cuando se mate la terminal. Sinceramente, esto suena como un tenedor para mí, no lo sé, nunca he tenido la necesidad de invocar un tenedor. – Dale
El proceso se cancela si cierra la sesión o si pierde su sesión, a menos que use el comando [nohup] (http://en.wikipedia.org/wiki/Nohup) :) pero no está seguro si puede volver a obtener el proceso una nueva sesión –