2013-04-09 148 views
1

說我在erl一些簡單的工作流程:當我做f(Pid).Erlang:當你f()中的一個Pid時會發生什麼?

1> Fun = fun(F) -> F(F) end. 
#Fun<erl_eval.6.82930912> 
2> Pid = spawn(fun() -> Fun(Fun) end). 
<0.178.0> 
3> f(Pid). 

會發生什麼?這個過程是否會退出?或者我只是失去了對它的引用?

回答

3

根據documentationf(Pid)刪除變量Pid的綁定,進程不停止。

您可以用這種方式測試它:假設您有一個gen_server,名爲myserver,它基於emacs erlang模式提供的骨架。

1> {ok, Pid} = myserver:start_link(). 
{ok,<0.39.0>} 
2> f(Pid). 
ok 
3> gen_server:call(pid(0,39,0), mycall). 
ok 
4> gen_server:call(myserver, mycall). 
ok 

正如你可以看到,即使我們做了f(Pid)我們可以在過程中使用的PID或註冊時使用的原子(在我們的例子模塊名稱)依然取得聯繫。

+1

謝謝!我覺得文檔含糊不清當你刪除綁定時會發生什麼,但是你的例子明確地說明了這一點。 – 2rs2ts 2013-04-09 14:43:56

+2

@agarrett僅僅因爲沒有對它們的引用,進程永遠不會消失。當他們完成他們的功能,他們或者死亡,發生錯誤或者他們被另一個進程殺死。 – rvirding 2013-04-09 15:06:15

相關問題