我正在閱讀Programming Erlang!在第13章的結尾,我們要建立一個保持活動過程中, 的例子喜歡:如何在Erlang中創建保持活動過程
on_exit(Pid, Fun) ->
spawn(fun() ->
Ref = monitor(process, Pid),
receive
{'DOWN', Ref, process, Pid, Info} ->
Fun(Info)
end
end).
keep_alive(Name, Fun) ->
register(Name, Pid = spawn(Fun)),
on_exit(Pid, fun(_Why) -> keep_alive(Name, Fun) end).
但當register/2
和on_exit/2
過程中可能退出,所以顯示器會失敗之間,我改變了keep_alive/2
這樣的:
keep_alive(Name, Fun) ->
{Pid, Ref} = spawn_monitor(Fun),
register(Name, Pid),
receive
{'DOWN', Ref, process, Pid, _Info} ->
keep_alive(Name, Fun)
end.
還有一個缺陷,spawn_monitor/2
和register/2
之間,該過程可能退出。這怎麼能成功運行?謝謝。
我覺得OP只是想了解編程二郎書行使/例子 - 我猜想,他之所以沒有得到該文本的OTP部分,但。 – Jr0 2014-09-03 20:36:31