2010-11-08 15 views
6

¿Qué sucede cuando el proceso que posee un puerto engendrado muere y el supervisor lo reinicia?Erlang: solidez contra la muerte del propietario del puerto

  1. ¿Hay alguna manera de que el puerto viejo no muera con su propietario y que el nuevo propietario "se haga cargo"?

  2. En su defecto, ¿es posible garantizar que el proceso generado termine cuando muera su puerto?

Respuesta

5

Primero, observe que no desea que el propietario del puerto muera. Así que mueva cualquier código "peligroso" a otro proceso y haga que el dueño del puerto sea lo más tonto posible. Esto es una mitigación de errores de la manera Erlang. Ahora, si ese proceso muere, algo es realmente malo, por lo que en ese caso puede ser inteligente reciclar el puerto también. Pero como lo sacamos todo, estamos contando con que eso no ocurra.

En relación con 2, el puerto enviará un mensaje específico cuando finalice, por lo que puede organizar su proceso generado para que lo detecte con gracia y finalice con él. Ver

http://www.erlang.org/doc/reference_manual/ports.html

+0

No creo que el puerto envía un mensaje especial para el proceso creado, y yo no veo esto en la documentación que hace referencia. Lo que sucederá es que la tubería para el proceso está cerrada y esto se puede atrapar en el proceso mismo (por ejemplo, buscar eof en su entrada) –

+0

Pero también tengo que decir que estoy absolutamente de acuerdo con su primer párrafo –

+0

Lo siento, pero Está usted equivocado. La tabla 14.3 enumera como los últimos motivos de salida del mensaje. También puede llamar al enlace/1 en un puerto para vincularlo si lo desea. Además, tenga en cuenta que para obtener este mensaje, su proceso debe atrapar señales de salida a través de process_flag/2, o de lo contrario no funcionará. –

Cuestiones relacionadas