【发布时间】:2011-02-16 15:50:37
【问题描述】:
我已经实现了一个 gen_server 和主管:test_server 和 test_sup。我想从 shell/CLI 测试它们。我已经编写了他们的start_link 函数,以便他们的名字在本地注册。
我发现我可以从命令行生成 test_server 就好了,但是生成的 test_sup 根本不允许我与服务器交互。
例如,我可以通过执行以下命令生成test_server:
1> spawn(test_server, start_link, []).
<0.39.0>
2> registered().
[...,test_server,...]
我可以与服务器交互,一切正常。
但是,如果我尝试对 test_sup 执行相同的操作,则不会在我的“CLI 进程”中注册新名称/Pid(使用 registered/0)。我的 test_server 似乎已生成,但我无法与之交互(请参阅 Lukas Larsson 对 SASL 的评论以了解为什么这是真的)。
我假设我在我的主管中编写了一个错误,但这种启动我的主管的方法非常有效:
1> {ok, Pid}= test_sup:start_link([]).
{ok, <0.39.0>}
2> unlink(Pid).
true
3> registered().
[...,test_server,test_sup,...]
为什么我可以生成 gen_server 但不能生成主管?
更新
我使用的代码可以在this post 中找到。我正在使用echo_server 和echo_sup,两个非常简单的模块。
鉴于该代码,这是可行的:
spawn(echo_server, start_link, []).
但事实并非如此:
spawn(echo_sup, start_link, []).
【问题讨论】:
-
你能把你的代码粘贴到某个地方吗?
标签: erlang erlang-otp erlang-supervisor