erlang 链接的gen_server不会终止

crcmnpdw  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(146)

我有一些服务器

-module(trivial).
-behaviour(gen_server).
-export([
    init/1,
    handle_call/3,
    handle_cast/2
]).

init([]) ->
    {ok, []}.

handle_call(_Msg, _From, State) ->
    {reply, ok, State}.

handle_cast(_Msg, State) ->
    {noreply, State}.

然后从其他进程内部启动它,该进程(立即)终止:

c(trivial).

Before = length([ Proc || Proc <- processes(), is_process_alive(Proc) ]).

Pid = spawn(fun() -> gen_server:start_link(trivial, [], []) end).

false = is_process_alive(Pid).

Before = length([ Proc || Proc <- processes(), is_process_alive(Proc) ]).

不幸的是,最后一个Assert并不成立:有+1个活动进程。我假设spawn内部的gen_server:start_link创建了一个链接,所以如果衍生的进程死亡,服务器也会死亡。为什么没有发生?我该如何使它发生?

uinbv5nw

uinbv5nw1#

发生这种情况是因为Pid没有更多的指令要运行,所以它退出的原因是normal,在本例中,它被无提示地删除。

相关问题