我已经实现了 gen_server 和 supervisor: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 进程”(使用registered/0
)中不会注册新的名称/Pid。Mytest_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 但不能生成主管?
更新
我正在使用的代码可以在这篇文章中找到。我正在使用echo_server
and echo_sup
,两个非常简单的模块。
鉴于该代码,这有效:
spawn(echo_server, start_link, []).
这不会:
spawn(echo_sup, start_link, []).