Erlang 当工人崩溃时,主管崩溃,主管不应';T

Erlang 当工人崩溃时,主管崩溃,主管不应';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() ->

我有一个Erlang
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,没有什么不寻常的,但是,看看我在问题中的更新