Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/04/2010, 06:30
javih82
 
Fecha de Ingreso: abril-2010
Mensajes: 1
Antigüedad: 14 años
Puntos: 0
Programación de un demonio - muere al cerrar la consola [SOLUCIONADO]

Hola a tod@s:

Lo primero saludar a los miembros de la comunidad, ya que soy nuevo en el foro.

Y aquí va mi pregunta:

Estoy realizando un programa en c/c++ para Ubuntu y quiero que se ejecute como un demonio del sistema. He conseguido que funcione con comandos tipo ./demonio start, ./demonio stop .... y todo bien. En un punto del programa hago un fork(), el padre termina y el hijo queda chequeando cosas... hasta que cierro la ventana del terminal!! Y eso no es lo que quiero.

EDITO:
Lo que hace el programa es gestionar ciertos servicios del sistema, por ejemplo: arrancar el servidor SSH, después de cierto evento, para lo cual llama al sistema con la órden [execl("/etc/init.d/ssh","ssh", "start", NULL);] Pues bien, me he dado cuenta que el demonio se cierra únicamente cuando tiene que sacar algo por pantalla (y no está la consola). Si la ejecución de la orden que sea devuelve algo tipo "cout" y la consola fué cerrada, entonces la aplicación termina abruptamente.

¿Cómo podría solucionar esto?

Muchas gracias por vuestras respuestas.

EDITO [SOLUCIONADO]:

El problema era que la salida estándar no está disponible al cerrar la consola, y cuando el proceso intenta hacer una salida, se cierra.

Justo antes de la instrucción execl() he cerrado STDOUT_FILENO y STDERR_FILENO con close() y los he redirigido a /dev/null con creat() haciendo que el proceso que ejecuta el comando dirija su salida hacia "nada".

Última edición por javih82; 30/04/2010 a las 09:02 Razón: SOLUCIONADO