2016-08-11 8 views
3

私はモニターされた/リンクされたプロセスの死ぬタイミングに関する質問があります。実際にそれをテストする方法は考えられません。ここに私が心配しているシナリオがあります。handle_callが完了する前に監視対象プロセスが停止した場合はどうなりますか?

私はmasterslaveと呼ばれるプロセスがあるとします。

  1. masterセットtruetrap_exit
  2. masterは、{ok, Pid} = slave:start_link()となります。
  3. mastergen_server:call(Pid, Msg)に相当します。
  4. の前に、メッセージはPidに到着し、プロセスはクラッシュします。

質問:

  1. master最初EXITメッセージを受け取ることができますか?または
  2. とが既に死んでいるので、masterが失敗しますか?

答えて

2

校正された回答ではありませんが、ここで何が起こる可能性があります。

のメールボックスに送信されるメッセージは、EXITです。 noprocエラー(これは、メッセージではなく、masterプロセスコンテキスト内で生成されているエラー)とは対照的です。
これは、おそらく両方を取得することを意味します。問題は誰が最初に来るかということです。

EXITメッセージがすぐに送信されているので

、あなたはプロセスがcallが到着する前にクラッシュしたことを言っているので、それはあなたの最初のEXITメッセージが表示されます意味があります。それらは独立しているので、のメールボックスにメッセージが届く前に、gen_server:callにはnoprocというエラーが返されるというオプションがあります。

あなたの実装の目的でこれを求めている場合は、両方のケースをカバーすることをお勧めします。私は本当にErlangがどれが最初になると約束するとは思わない。

関連する問題