• Viernes 8 de Noviembre de 2024, 18:56

Autor Tema:  Vigilancia de procesos: problema signal 11  (Leído 781 veces)

guiu

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Vigilancia de procesos: problema signal 11
« en: Miércoles 7 de Julio de 2010, 10:34 »
0
Muy buenas!
Tengo un código que, básicamente, conecta vía TCP con un servidor, recibe unos datos y los procesa. Este código recibe un parámetro para indicar a cual que los dos servidores disponibles se hace la conexión. En operación normal, se lanzan dos procesos, y cada uno se conecta a un servidor. Además de las tareas que deben hacer, han de vigilarse el uno al otro. Para hacer esa vigilancia, lo que hago es:
- Defino dos ficheros. Uno asociado a cada cliente TCP. Por ejemplo, cliente A (q se conecta a servidor A) tendrá el fichero A.vigilancia y cliente B (que se conecta a servidor B) tendrá B.vigilancia. Ambos clientes conocen ambos ficheros.
- Lo que hace un cliente cada cierto tiempo es:
    - Escribe en su fichero un número (que va incrementándose en cada acceso). Es decir, cliente A escribe en A.vigilancia un número. De esta forma, el número que se escribe va cambiando en cada acceso.
    - Lee en el fichero del otro cliente qué valor hay. Siguiendo con el ejemplo, cliente A lee el número que hay en B.vigilancia.
    - Si el número leído durante 5 veces consecutivas no cambia, es porque el otro proceso no está haciendo su escritura: se ha caído y debe relanzarse.

El caso es que funciona bien hasta cierto punto. Lanzo los dos clientes, y lo que hago es ir tirando primero uno, luego el otro, luego otra vez uno, etc., de forma que voy viendo si con la caída de un cliente el otro es capaz de "levantarlo".
 Ejm.
- INICIO: A y B lanzados.
- kill sobre A.
- Al tiempo B "levanta" a A.
- kill sobre B.
- Al tiempo A "levanta" a A.
etc.

Cuando los he tirado unas cuantas veces (4 o 5 cada cliente), ocurre que, de repente, no es posible levantar un cliente que ha caído, ya que se recibe una señal de segmentation fault (signal 11).

¿Alguien tiene alguna idea sobre por qué me está pasando esto? La máquina sobre la que corre el programa es Solaris 2.6 (vieja escuela...).

Muchas gracias de antemano. Espero vuestras sugerencias.