1

假设我正在处理一些简单的过程erl

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).

当我这样做时会发生什么f(Pid).?进程退出还是我只是失去了对它的引用?

4

1 回答 1

3

根据文档 f(Pid)删除变量 Pid 的绑定,该过程不会停止。

您可以通过这种方式对其进行测试:假设您有一个myserver基于 emacs erlang 模式提供的骨架的 gen_server 调用。

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 或注册期间使用的原子(在我们的例子中是模块名称)联系进程。

于 2013-04-09T14:38:16.200 回答