如何将孩子添加到 erlang 主管?

Posted

技术标签:

【中文标题】如何将孩子添加到 erlang 主管?【英文标题】:How to add a child to a erlang supervisor? 【发布时间】:2017-09-20 04:26:48 【问题描述】:

我正在尝试将事件管理器添加到主管,但出现如下错误:

1> test_event_call:start_link().
ok,<0.85.0>
2> test_event_call:start_event().
error,ok,child,undefined,test_event_proc,
                  test_event,start,[],
                  transient,200000,worker,
                  [test_event]

主管模块是test_event_call.erl:

-module(test_event_call).
-behaviour(supervisor).
-export([start_link/0, start_event/0, init/1]).

start_link() ->
    supervisor:start_link(local, ?MODULE, 
                          ?MODULE, []).

start_event() ->
    supervisor:start_child(?MODULE, test_event_proc,
                                     test_event, start, [],
                                     transient, 200000, worker, [test_event]).

init(_Args) ->
    ok, one_for_one, 1, 5, [].

孩子是test_event.erl:

-module(test_event).
-behaviour(gen_event).
-export([init/1, handle_event/2, handle_call/2, handle_info/2, terminate/2, code_change/3]).


-export([start/0, log_fun/2]).

start() ->
    ok, _Pid = gen_event:start_link(local, ?MODULE),
    gen_event:add_handler(?MODULE, ?MODULE, []).

谁能帮我解决这个错误?

【问题讨论】:

尝试从test_event:start()返回ok, Pid,而不是返回gen_event:add_handler/3的返回值。 【参考方案1】:

返回 ok, Pid 解决了我的问题。

【讨论】:

您必须指定评论的作者或对它的补充,而不仅仅是复制它。

以上是关于如何将孩子添加到 erlang 主管?的主要内容,如果未能解决你的问题,请参考以下文章

Erlang 主管有一个关键的孩子

Erlang simple_one_for_one 主管不重启孩子

Erlang:supervisor(3),添加子进程

我怎么知道这是由 erlang 中的主管重新启动我的进程的最后一个周期

Erlang OTP 主管 gen_tcp - error,eaddrinuse

如何分发 Erlang 进程(主管行为)?