Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/09/2009, 02:36
guiu
 
Fecha de Ingreso: junio-2009
Mensajes: 4
Antigüedad: 14 años, 11 meses
Puntos: 0
Vigilancia entre dos procesos

Hola a todos,

He hecho un programa que se conceta a un dispositivo via TCP. Este código se usa para ejecutarse desde la misma máquina, conectándose via TCP a dos dispositivos diferentes: es decir, el mismo código da lugar a dos procesos distintos, corriendo sobre el mismo PC. Estoy tratando de implementar una forma de vigilancia entre sendos procesos. La forma en que lo estoy haciendo es que cada uno de los procesos lea un fichero de texto y escriba un numero 'incrementado' en otro. Es decir, cada proceso por su cuenta escribe en "su" fichero 1,2,3,...15,1,3,...15,1, etc. Además, lee del fichero del otro proceso que éste escribe 1,2,3,...15,1, etc. Si alguno de los dos procesos ve que el numero que lee "se para", considera que "su hermano" ha muerto, y reaaranca el programa (este rearranque lo hace el proceso de lectura, mediante un fork, más execl)

Para hacer esta estructura, lo que hace el programa es crear dos procesos hijo, uno de lectura y otro de escritura, que lo único que hacen es entrar en un bucle y cada cierto tiempo leen y escriben del/en el fichero correspondiente. El padre de ambos procesos es el que se comunica con el dispositivo via TCP y hace una serie de tareas.

Llamando A y B a los procesos, he comprobado que la cosa funciona perfectamente en el siguiente caso
- A arranca y B no: cuando pasa un tiempo, A detecta que B está muerto y lo arranca. Si volvemos a parar B cuantas veces queramos, A lo rearranca sin problemas.

Sin embargo, si se da el caso de que A arranca (B inicialmente no), y B es lanzado desde A, y después se tira el proceso A, cuando B intenta rearrancarlo me da un error de Segmentation Fault (signal 11). En este caso, B "nace" hijo de A, y luego pretende rearrancar A (eso sí, cuando lo hace A está muerto). Es algo muy raro que lleva dándome dolores de cabeza bastante tiempo.

¿Alguien tiene una idea de qué es loq ue puede estar pasando o qué es lo qeu puedo hacer para solucionar el problema?

Muchas gracias de antemano y perdón por el ladrillaco.