Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Vigilancia entre dos procesos

Estas en el tema de Vigilancia entre dos procesos en el foro de C/C++ en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 23/09/2009, 02:36
 
Fecha de Ingreso: junio-2009
Mensajes: 4
Antigüedad: 14 años, 10 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.
  #2 (permalink)  
Antiguo 23/09/2009, 04:12
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Vigilancia entre dos procesos

Usa gdb con el proceso que muere al dar el segmentation fault, seguramente es un acceso a memoria invalida.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 23/09/2009, 04:35
 
Fecha de Ingreso: junio-2009
Mensajes: 4
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Vigilancia entre dos procesos

Hola Eternal Idol,

Gracias por la respuesta. Cómo se usa ese programa? Digamos que no estoy yo muy ducho en la programación en C bajo SO tipo unix. En concreto, mi máquina es una SUN con Solaris 2.6.

Por otro lado, en caso de ser un acceso a memoria inválida (yo tb lo creo), cómo puedo ver el error? La verdad es que llevo semanas intentado averiguar qué pasa...
  #4 (permalink)  
Antiguo 23/09/2009, 04:47
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Vigilancia entre dos procesos

Aca tenes un tutorial, yo trabajo sobre Windows asi que lo que se de *NIX es superficial. Para ver el error depura el programa (con el gdb u otro depurador que haya para Solaris), este se parara en la linea (o instruccion de ensamblador sino tenes la informacion de debug generada) que lo causa, puede ser desreferenciar un puntero nulo por ejemplo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 23/09/2009, 06:49
 
Fecha de Ingreso: junio-2009
Mensajes: 4
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Vigilancia entre dos procesos

Ok, ya estoy mirando cómo funciona el gdb. Gracias por la ayuda; si hay alguna novedad/cosa interesante lo comento.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:21.