假设我正在处理一些简单的过程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).
?进程退出还是我只是失去了对它的引用?
假设我正在处理一些简单的过程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).
?进程退出还是我只是失去了对它的引用?
根据文档 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 或注册期间使用的原子(在我们的例子中是模块名称)联系进程。