【问题标题】:Erlang: robustness against port owner's deathErlang:对港口所有者死亡的鲁棒性
【发布时间】:2010-11-09 08:25:19
【问题描述】:

当拥有派生端口的进程死亡并被主管重新启动时会发生什么?

  1. 有没有办法让老港口不随主人一起死去,让新主人“接管”?

  2. 如果做不到这一点,是否可以确保生成的进程在其端口死亡时终止?

【问题讨论】:

    标签: erlang erlang-ports


    【解决方案1】:

    首先,请注意您不希望端口所有者死亡。因此,将任何“危险”代码移至另一个进程,并使端口所有者尽可能地愚蠢。这是 Erlang 的错误缓解方式。现在,如果那个进程死掉了,那就是真的很糟糕,所以在这种情况下,回收端口也可能是聪明的。但既然我们把所有东西都搬走了,我们就指望这不会发生。

    关于 2,端口将在终止时发送特定消息,因此您可以安排您的衍生进程优雅地检测到这一点并以它终止。见

    http://www.erlang.org/doc/reference_manual/ports.html

    【讨论】:

    • 我认为端口不会向生成的进程发送特殊消息,我在您链接到的文档中也没有看到这一点。将会发生的情况是流程的管道已关闭,您可以在流程本身中捕捉到这一点(例如,在您的输入中查找 eof)
    • 但也不得不说我绝对同意你的第一段
    • 对不起,你错了。表 14.3 列出了最后一条消息退出原因。如果愿意,您还可以在端口上调用 link/1 以链接到它。另外,请注意,要获取此消息,您的进程必须通过 process_flag/2 捕获退出信号,否则它将无法工作。
    • 我认为您在这里谈论的是不同的事情。 Peer 描述了外部端口进程如何看到端口已关闭(其输入管道上的 eof),而 NOT CRAPPY ANSWERS 描述了连接的 erlang 进程如何看到它。
    猜你喜欢
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2022-06-12
    相关资源
    最近更新 更多