【问题标题】:What is the semantics for choosing the reason when stopping a gen_server?停止 gen_server 时选择原因的语义是什么?
【发布时间】:2012-04-18 11:43:14
【问题描述】:

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}

【问题讨论】:

    标签: erlang erlang-otp


    【解决方案1】:

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

    shutdown{shutdown, Reason} 由主管进程在告诉其子进程终止时使用(例如,整个应用程序正在终止或监管树中的另一个进程已死亡,这是一个 one_for_all 主管)。

    我对所有预期的终止使用normal,对意外的终止使用{error, ErrorDescription}

    【讨论】:

    • 主管使用shutdown的原因是它实际上是一个错误值。因此,如果一个孩子没有困住出口,那么它将被杀死。如果它正在捕获退出,那么它应该专门处理来自其父级(主管)的shutdown 退出信号并干净地终止。这是由 OTP 行为处理的,因此无需自己进行。
    猜你喜欢
    • 2016-02-14
    • 2023-01-22
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多