gen_server と Supervisor:test_server
とtest_sup
. シェル/CLI からテストしたい。start_link
名前がローカルに登録されるように関数を記述しました。
test_server
コマンドラインから問題なく生成できることがわかりましたが、生成test_sup
された ではサーバーとのやり取りがまったくできません。
たとえば、次のコマンドtest_server
を実行して a を生成できます。
1> spawn(test_server, start_link, []).
<0.39.0>
2> registered().
[...,test_server,...]
サーバーと対話でき、すべて正常に表示されます。
ただし、 で同じことをしようとするとtest_sup
、「CLI プロセス」( を使用registered/0
) に新しい名前/Pid が登録されません。私のtest_server
は生成されたように見えますが、それと対話することはできません (これが本当である理由については、SASL に関する Lukas Larsson のコメントを参照してください)。
スーパーバイザーでエラーをコーディングしたと思いますが、スーパーバイザーを起動するこの方法は完全に正常に機能します。
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
とecho_sup
、2 つの非常に単純なモジュールを使用しています。
そのコードを考えると、これは機能します:
spawn(echo_server, start_link, []).
これはしません:
spawn(echo_sup, start_link, []).