simple_one_for_one
スーパーバイザーのプールを監視しているスーパーバイザーがいて、子仕様は次のようになっています
init([]) ->
{ok, {{simple_one_for_one, 60, 5},
[{subsup, {subsup, start_link, []},
permanent, infinity, supervisor, dynamic}]}}.
私start_child
の機能は次のようになります。
start_subsup(Name) ->
SupName = {via, ?MODULE, Name},
supervisor:start_child(?MODULE, [SupName]).
重要な部分は次のとおりです。登録via
しています -- 、、、および(ets テーブルに裏打ちされた)?MODULE
を適切に実装しました。必要に応じて、そのコードも投稿できます。register_name/2
unregister_name/1
whereis_name/1
send/2
私の子供の start_link 関数は次のようになります。
start_link(SupName) ->
supervisor:start_link(SupName, ?MODULE, []).
すべてが起動して実行されると、次のようなことが起こります。
%% This returns a live pid. cool.
Pid = sup:whereis_name(name),
%% I can terminate it, and it really dies
ok = supervisor:terminate_child(sup, Pid),
undefined = process_info(Pid),
%% But! it never calls unregister_name!?
Pid = sup:whereis_name(name).
子スーパーバイザーを停止させて再起動できるようにすべてを設定しましたが、名前が登録解除されていないためにブロックされています。
前もって感謝します!