Erlang: устойчивость против смерти владельца порта

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам