Erlang:针对端口所有者的健壮性';死亡

Erlang:针对端口所有者的健壮性';死亡,erlang,erlang-ports,Erlang,Erlang Ports,当拥有衍生端口的进程死亡并由主管重新启动时会发生什么情况 有没有办法让旧港口不与其所有者一同消亡,让新所有者“接管” 如果失败,是否可以确保生成的进程在其端口死亡时终止 首先,请注意,您不希望端口所有者死亡。因此,将任何“危险”代码移到另一个进程中,并使端口所有者尽可能保持沉默。这是Erlang方式的错误缓解。现在,如果这个进程死掉了,那就真的很糟糕了,所以在这种情况下,回收这个端口也是明智的。但既然我们把所有东西都搬走了,我们就指望这一切不会发生 关于2,端口在终止时将发送一条特定消息,因此您

当拥有衍生端口的进程死亡并由主管重新启动时会发生什么情况

  • 有没有办法让旧港口不与其所有者一同消亡,让新所有者“接管”

  • 如果失败,是否可以确保生成的进程在其端口死亡时终止


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

    关于2,端口在终止时将发送一条特定消息,因此您可以安排生成的进程正常地检测到它并随它终止。看


    我认为端口不会向衍生进程发送特殊消息,在您链接到的文档中也没有看到这一点。将发生的情况是,流程的管道关闭,您可以在流程本身中捕捉到这一点(例如,注意您输入的eof),但也必须说,我完全同意您的第一段。对不起,但您错了。表14.3列出了最后一条消息的退出原因。如果愿意,也可以在端口上调用link/1来链接到它。另外,请注意,要获得此消息,您的进程必须通过进程_flag/2捕获退出信号,否则它将无法工作。我认为您在这里谈论的是不同的事情。Peer正在描述外部端口进程如何看到端口已关闭(输入管道上的eof),而NOT CRAPPY ANSWERS正在描述连接的erlang进程如何看到它。