我有一些服务器
-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
创建了一个链接,所以如果衍生的进程死亡,服务器也会死亡。为什么没有发生?我该如何使它发生?
1条答案
按热度按时间uinbv5nw1#
发生这种情况是因为
Pid
没有更多的指令要运行,所以它退出的原因是normal
,在本例中,它被无提示地删除。