¿Cómo usar fork () para demonizar un proceso hijo independiente de su padre?

Posible duplicado:
Linux: evita que un proceso en segundo plano se detenga después de cerrar el cliente SSH

Tengo un progtwig en C al que accedo e interactúo en una terminal (generalmente desde SSH en una caja de Linux). He estado tratando de encontrar la solución al problema donde, después de cerrar el terminal / cierre de sesión, el proceso termina con él (el progtwig básicamente solicita algunas opciones y luego continúa con su negocio sin necesidad de más interacción, por lo que me gustaría tenerlo). continuar ejecutando incluso después de que cierre sesión en SSH).

Hay formas en Linux de evitar esto, como “pantalla”, pero quiero hacerlo programáticamente con C sin depender de paquetes instalados como pantalla, incluso si esto significa reinventar la rueda.

Hasta ahora, entiendo que fork () es la manera trivial estándar de demonizar un proceso, ¿podría alguien 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 sesión en SSH, que cierra el shell original … ¡y el niño continúa su trabajo!

Dentro del niño:

 //Continue with processing data/whatever the program does (no input/output to terminal required) exit(0); 

para separar el proceso del padre :

use setsid () en el proceso secundario, ejecutará el progtwig en una nueva sesión

  sid = setsid(); 

Eche un vistazo al ejemplo en http://www.itp.uzh.ch/~dpotter/howto/daemonize


Para mantener un progtwig en ejecución incluso cuando el terminal está cerrado :

SIGHUP es una señal enviada a un proceso cuando su terminal de control está cerrado.

intenta ignorarlo usando

 signal (SIGHUP, SIG_IGN);