Erlang: устойчивость к смерти владельца порта - PullRequest
6 голосов
/ 08 ноября 2010

Что происходит, когда процесс, которому принадлежит порожденный порт, умирает и перезапускается супервизором?

  1. Есть ли способ для старого порта не умереть со своим владельцем, а для нового владельца "захватить власть"?

  2. Если это не так, возможно ли гарантировать, что порожденный процесс завершится, когда его порт умрет?

1 Ответ

5 голосов
/ 09 ноября 2010

Во-первых, обратите внимание, что вы не хотите, чтобы владелец порта умер.Поэтому перенесите любой «опасный» код в другой процесс и сделайте владельца порта настолько глупым, насколько это возможно.Это смягчение ошибок способом Эрланга.Теперь, если этот процесс умирает, что-то действительно плохо, так что в этом случае может быть разумно перезапустить порт.Но так как мы переместили все, мы рассчитываем на то, что этого не произойдет.

Что касается 2, порт отправит определенное сообщение, когда он завершится, так что вы можете устроить так, чтобы ваш порожденный процесс корректно обнаружил это и завершил сЭто.См

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

...