二郎.正确的方法来停止进程

Dfr*_*Dfr 11 erlang

美好的一天,我为我的小服务设置了以下设置:

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

....
Run Code Online (Sandbox Code Playgroud)

这是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> 
Run Code Online (Sandbox Code Playgroud)

如您所见,停止进程会产生错误,但进程正在停止.这个错误意味着什么,以及如何使事情干净?

Mar*_*ner 20

不是Erlang程序员,只是从exit(这里)的文档中,我要说,这exit需要一个进程id作为第一个参数,而你将一个atom(?SERVER)传递给它.

尝试

exit(whereis(?SERVER), ok).
Run Code Online (Sandbox Code Playgroud)

而是(whereis返回与名称关联的进程ID,请参阅此处)

  • +1能够阅读文档可能与了解内部语言一样有价值. (6认同)