停止gen_server时选择原因的语义是什么?

时间:2012-04-04 17:57:11

标签: erlang otp

Erlang文档说明了以下关于gen_servers的内容:

  

...

     

请注意,除了正常,关闭或{shutdown,Term}之外的任何其他原因,假定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}

1 个答案:

答案 0 :(得分:7)

如果您的服务器已完成其工作且正常终止,则应使用normal

主管进程在告诉他们的孩子终止时使用

shutdown{shutdown, Reason}(例如整个应用程序正在终止,或者监督树中的另一个进程已经死亡,这是一个one_for_all主管)。

我将normal用于所有预期的终止,{error, ErrorDescription}用于意外终止。