2010-11-08 60 views
6

當擁有一個衍生出的港口的過程死亡並且由主管重新啓動時會發生什麼?Erlang:針對港口所有者的死亡的堅固性

  1. 有沒有辦法讓舊港口不要與它的主人一起死亡,並讓新船東「接管」?

  2. 失敗了,是否有可能確保生成的進程終止時,其端口死亡?

回答

5

首先,請注意,您不希望港口所有者死亡。因此,將任何「危險」代碼移出到另一個進程,並儘可能使端口所有者變得愚蠢。這是Erlang方式的錯誤緩解。現在,如果這個過程死了,有些事情真的很糟糕,所以在這種情況下,再循環港口也可能很聰明。但是,既然我們把所有的東西都搬出去了,我們就指望不會發生。

關於2,端口將在終止時發送特定的消息,因此您可以安排產生的進程正常檢測並終止此消息。見

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

+0

我不認爲該端口發送一個特殊的消息到生成的過程中,我沒有看到這個鏈接到的文件中。會發生什麼事情是,過程中的管道是關閉的,你可以在流程本身中捕獲(例如,在你的輸入上尋找eof) – 2010-11-09 07:17:39

+0

但是也要說我絕對同意你的第一段 – 2010-11-09 07:18:34

+0

我很抱歉,但是你錯了。表14.3列出了最後的消息退出原因。你也可以在端口上調用link/1來鏈接它。另外,請注意,要獲取此消息,您的進程必須通過process_flag/2陷阱出口信號,否則它將無法工作。 – 2010-11-10 01:25:17