2017-02-10 4 views
0

によって子を終了することはできません、それはマニュアルに従って必要があります。https://hexdocs.pm/elixir/1.3.3/Supervisor.html#terminate_child/2スーパーバイザー:そのpidで子供を終了しようとすると、動作しませんPID

iex(7)> {:ok, sup} = Supervisor.start_link([], strategy: :one_for_one)       
{:ok, #PID<0.383.0>} 
iex(8)> {:ok, pid} = Supervisor.start_child(sup, worker(RData.ExpectedRefurbishmentCost, [self()])) 
{:ok, #PID<0.385.0>} 
iex(9)> Supervisor.terminate_child(sup, pid)              
{:error, :not_found} 

それを動作させるために、任意の手がかり?

+5

ドキュメントでは、simple_one_for_one' '除くすべての戦略のための子IDを渡す必要があると言う:1が提供されていない場合idSupervisor.Spec.worker/3により、モジュールに設定されているのでので、:one_for_oneために、次はあなたのために働く必要があります。 PIDは 'simple_one_for_one'に対してのみ機能します。 – Dogbert

+0

私はそれを越えました...精度のためのthx :) – knotito

答えて

3

:simple_one_for_oneを除くすべての戦略については、子供IDをterminate_childに渡す必要があります。

Supervisor.terminate_child(sup, RData.ExpectedRefurbishmentCost) 
関連する問題