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

ped*_*oel 4 erlang 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


由于除了这三个原因以外的任何原因都被认为是错误,我推断其原因normal,shutdown并被{shutdown, Reason}认为是正常行为.

我想在开发人员选择这三个理由在正常情况下停止gen_server时,开发人员有动机,但我不太确定如何确定使用哪一个.

所以,当我应该使用normal,shutdown{shutdown, Reason}

Isa*_*sac 7

normal如果您的服务器已完成其工作并正在正常终止,您应该使用它.

shutdown并且{shutdown, Reason}当主管进程告诉他们的孩子终止时(例如,整个应用程序正在终止或监督树中的另一个进程已经死亡,并且这是一个one_for_all主管),由主管进程使用.

normal用于所有预期的终止和{error, ErrorDescription}意外终止.

  • 主管使用`shutdown`的原因是它实际上是一个错误值.因此,如果一个孩子没有诱捕出口,那么它将被杀死.如果它是陷阱退出,那么它应该专门处理来自其父(主管)的`shutdown`退出信号并干净地终止.这是由OTP行为处理的,因此不需要自己动手. (4认同)