2012-04-04 3 views
4

アーランドキュメント状態次約gen_servers:gen_serverを停止する理由を選択するためのセマンティクスとは何ですか?

...通常、シャットダウン、または{シャットダウン、用語}以外の理由gen_serverが起因して終了するものとすること

注error_logger:format/2を使用してエラーレポートが発行されます。

出典:これらの三つの理由以外はエラーとはみなされているのでhttp://www.erlang.org/doc/man/gen_server.html#Module:terminate-2


、私は理由のnormalshutdown{shutdown, Reason}が正常な行動とみなされていることを推測します。

通常の状況下でgen_serverを停止する3つの理由を選択するとき、開発者が動機を持っていると想像していますが、どちらを使用するかを決める方法はあまりよく分かりません。

だから、normalshutdown{shutdown, Reason}を使用する必要がありますか?

答えて

6

サーバーが正常に終了している場合は、normalを使用してください。

shutdownおよび{shutdown, Reason}は、スーパーバイザプロセスによって子プロセスに終了を通知するときに使用されます(たとえば、アプリケーション全体が終了しているか、監督ツリー内の別のプロセスが終了していてこれがone_for_allスーパーバイザです)。

すべての予想される終端にはnormal、予期しない終端には{error, ErrorDescription}を使用します。

+0

ありがとうございます!私はスーパーバイザについての読書をスキップしたと思います:P – pedromanoel

+3

スーパーバイザが 'shutdown'を使用する理由は実際にはエラー値です。だから子供が出口を閉じ込めていなければ、それは殺されるでしょう。もしそれが閉じ込められているならば、その親(スーパバイザ)からの「シャットダウン」終了信号を特別に扱い、きれいに終了することが期待されます。これはOTPの振る舞いによって処理されるので、自分で行う必要はありません。 – rvirding

関連する問題