无法从shell生成erlang supervisor

无法从shell生成erlang supervisor,erlang,otp,erlang-supervisor,Erlang,Otp,Erlang Supervisor,我已经实现了一个gen_服务器和管理器:test_服务器和test_-sup。我想从shell/CLI测试它们。我已经编写了它们的start\u link函数,以便在本地注册它们的名称 我发现我可以从命令行生成test\u服务器,但是生成的test\u sup根本不允许我与服务器交互 例如,我可以通过执行以下命令生成test\u服务器: 1> spawn(test_server, start_link, []). <0.39.0> 2> registered(). [..

我已经实现了一个gen_服务器和管理器:
test_服务器
test_-sup
。我想从shell/CLI测试它们。我已经编写了它们的
start\u link
函数,以便在本地注册它们的名称

我发现我可以从命令行生成
test\u服务器
,但是生成的
test\u sup
根本不允许我与服务器交互

例如,我可以通过执行以下命令生成
test\u服务器

1> spawn(test_server, start_link, []).
<0.39.0>
2> registered().
[...,test_server,...]
为什么我可以生成gen_服务器,但不能生成主管


更新

我使用的代码可以在中找到。我正在使用
echo\u服务器
echo\u sup
,这两个非常简单的模块

考虑到这些代码,这是可行的:

spawn(echo_server, start_link, []).
这并不是:

spawn(echo_sup, start_link, []).

无论何时试图弄明白这些事情,打开SASL通常是非常有帮助的

应用程序:启动(sasl)


这样你就有希望知道你的主管为什么要离职。

伯纳德·达根(Bernard Duggan)在以下网站上给出了这一解释:

链接进程不会自动关闭 当它们链接到某个进程时死亡 退出,代码为“正常”。这就是为什么 [echo_server]在 产卵过程退出。那为什么呢 主管死了?内部 监控模块实际上是 他们自己作为一个 gen_服务器,但具有 设置进程\u标志(陷阱\u退出,真)。 其结果是当 父进程死亡,terminate()获取 调用(当 陷阱_退出被禁用)和 主管关闭。这是有道理的 在主管的情况下,因为 主管由其父级生成 在监督树中-如果没有 当它的母公司关闭时就会死亡, 不管是什么原因,你都会 悬挂在树上的“树枝”


你能把你的代码粘贴到某个地方吗?它似乎没有终止。启动SASL后,我会收到一份进度报告,上面说echo_sup和echo_服务器已启动,但在此之后,无法从命令行访问echo_服务器。我必须查看您的主管代码和gen_服务器,以便为您提供更多帮助。您可能只是缺少了一些小东西。我链接到更新#1中的代码。
spawn(echo_sup, start_link, []).