Erlang 当工人崩溃时,主管崩溃,主管不应';T
我有一个ErlangErlang 当工人崩溃时,主管崩溃,主管不应';T,erlang,otp,erlang-supervisor,Erlang,Otp,Erlang Supervisor,我有一个Erlangsupervisor,它基于gen_server来监督工作服务器的进程,我从shell我的supervisor启动,它反过来启动我的工作服务器,没有任何问题,如下所示: start_link() -> supervisor:start_link({local, ?SERVER}, ?MODULE, []). 但是,当我崩溃我的工作服务器时,我的主管会因为未知的原因崩溃它 我在互联网上找到了一个解决方案,我使用: start_link_shell() ->
supervisor
,它基于gen_server
来监督工作服务器的进程,我从shell我的supervisor启动,它反过来启动我的工作服务器,没有任何问题,如下所示:
start_link() ->
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
但是,当我崩溃我的工作服务器时,我的主管会因为未知的原因崩溃它
我在互联网上找到了一个解决方案,我使用:
start_link_shell() ->
{ok,Pid} = supervisor:start_link({local, ?SERVER}, ?MODULE, []),
unlink(Pid).
现在它工作正常,但我不明白为什么,有人能解释吗
**
更新
**
这是我的init函数
%%%===================================================================
init([]) ->
% Building Supervisor specifications
RestartStrategy = one_for_one,
MaxRestarts = 2,
MaxSecondsBetweenRestarts = 5000,
SupFlags = {RestartStrategy, MaxRestarts, MaxSecondsBetweenRestarts},
% Building Child specifications
Restart = permanent,
Shutdown = 2000, % Number of seconds the child is allowed to run after receiving shutdown message
Type = worker,
ChildSpec = {'db_server',
{'db_server', start_link, []},
Restart,
Shutdown,
Type,
['db_server']},
% Putting Supervisor and Child(ren) specifications in the return
{ok, {SupFlags, [ChildSpec]}}.
据此:
shell测试主管的问题在于,主管流程与shell流程相关联。当gen_服务器进程崩溃时,退出信号会传播到崩溃并重新启动的shell。。这将仅用于测试,否则,OTP应用程序应启动主管并链接到它。主管回调模块中的init
函数是什么样子的?@Legossia,没有什么不寻常的,但是,看看我在问题中的更新