美好的一天,我的小服务有以下设置:
-module(mrtask_net).
-export([start/0, stop/0, listen/1]).
-define(SERVER, mrtask_net).
start() ->
Pid = spawn_link(fun() -> ?MODULE:listen(4488) end),
register(?SERVER, Pid),
Pid.
stop() ->
exit(?SERVER, ok).
....
这是repl摘录:
(emacs@rover)83> mrtask_net:start().
<0.445.0>
(emacs@rover)84> mrtask_net:stop().
** exception error: bad argument
in function exit/2
called as exit(mrtask_net,ok)
in call from mrtask_net:stop/0
(emacs@rover)85>
如您所见,停止进程会产生错误,但进程正在停止。
这个错误是什么意思以及如何使事情变得干净?
最佳答案
不是 Erlang 程序员,只是来自 exit
的文档( here ),我想说的是 exit
需要一个进程 ID 作为第一个参数,而您正在向它传递一个原子( ?SERVER
)。
尝试
exit(whereis(?SERVER), ok).
相反(
whereis
返回与名称关联的进程 ID,参见 here )
关于二郎。停止进程的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7970456/