日安,我为我的小服务做了以下设置:
-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> 正如您所看到的,停止进程会产生错误,但是进程正在停止。这个错误是什么意思,以及如何让事情变得干净?
发布于 2011-11-02 16:26:39
正如@MartinStettner指出的那样,您需要更改对exit/2的调用。该进程停止的原因是您已经使用spawn_link启动了该进程。然后将您的进程链接到shell进程。当您调用mrtask_net:stop()时,该错误导致shell进程崩溃,然后在它们链接时导致您的进程崩溃。然后会自动启动一个新的shell进程,以便您可以继续使用该shell。您通常希望使用spawn_link启动服务器,但当您从shell测试它们时,它们“碰巧”就死了,这可能会导致混淆。
https://stackoverflow.com/questions/7970456
复制相似问题