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, []).