Duplicar posible:
Linux: Prevent a background process from being stopped after closing SSH clientCómo usar fork() para demonizar un proceso secundario independiente de su padre?
I tiene un programa C que I acceder e interactuar con más de terminal (por lo general de SSH en una caja de Linux). He estado tratando de encontrar la solución al problema donde después de cerrar la terminal/cerrar sesión, el proceso termina con ella (el programa básicamente pide algunas opciones y luego se ocupa de su negocio sin necesidad de más interacción, por lo que me gustaría tenerlo). continuar corriendo incluso después de desconectarme de SSH).
Hay maneras en Linux para evitar esto, como 'pantalla', pero quiero hacerlo programáticamente con C sin depender de paquetes instalados, como la pantalla, incluso si esto significa reinventar la rueda.
Hasta ahora entiendo que fork() es la forma trivial estándar de demonizar un proceso, así que ¿alguien podría ayudarme a terminar el código que permite que ocurra el proceso descrito anteriormente?
Dentro de los padres:
main()
{
//Do interactive stuff
signal(SIGCHLD, SIG_IGN); //stops the parent waiting for the child process to end
if(fork())
exit(0);
// and now the program continues in the child process
ahora puedo cerrar la sesión de SSH que cierra la carcasa original, ... y el niño continúa su trabajo!
Dentro de niño:
//Continue with processing data/whatever the program does (no input/output to terminal required)
exit(0);
Lea todas las respuestas. http://stackoverflow.com/questions/285015/linux-prevent-a-background-process-from-being-stopped-after-closing-ssh-client –
Um, simplemente usa 'nohup' cuando lo ejecutas? No se requiere bifurcación. –
@ Brian, nohup no me deja interactuar con el programa. Es una interacción de línea de comando. – user1166981