2012-04-04 49 views
4

Erlang的文檔指出以下有關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的三個原因時,開發人員有一個動機,但我不太確定如何確定使用哪一個。

那麼我應該什麼時候使用normalshutdown{shutdown, Reason}

回答

6

如果您的服務器已完成工作並正常終止,則應使用normal

shutdown{shutdown, Reason}當監督人員告訴他們的孩子終止(例如,整個應用程序正在終止或監督樹中的另一個進程已經死亡並且這是one_for_all主管)時,他們會使用它們。

對於所有預期終止,我使用normal,對於意外終止,使用{error, ErrorDescription}

+0

謝謝!我想我跳過了關於主管的閱讀:P – pedromanoel 2012-04-04 21:36:49

+3

主管使用'shutdown'的原因是它實際上是一個錯誤值。所以如果一個孩子沒有陷入退出,那麼它會被殺死。如果它陷入退出,那麼它應該特別處理來自其父母(主管)的「關機」退出信號,並乾淨地終止。這是由OTP行爲處理的,所以不需要自己做。 – rvirding 2012-04-05 12:40:09

相關問題