2016-03-17 7 views
5

私はスーパーバイザを持っており、いつでもそのスーパーバイザの下で実行されているすべてのプロセスを知りたいと思っています。スーパーバイザやノード内のすべてのプロセスですべてのPID、名前などを取得する簡単な方法があるはずですが、何も見つかりません。エリクシール - スーパーバイザのプロセスのすべてのPIDを取得

どうすればよいですか?

+0

今後の参考のためにエリクサースーパーバイザモジュールがここに文書化されていますhttp://elixir-lang.org/docs/stable/elixir/Supervisor.html –

答えて

10

あなたはSupervisor.which_children/1を使用することができます。

iex> Supervisor.which_children(MyApp.Supervisor) 
[{MyApp.SubSupervisor, #PID<0.1695.0>, :supervisor, [MyApp.SubSupervisor]}, 
{MyApp.Endpoint, #PID<0.1686.0>, :supervisor, [MyApp.Endpoint]}] 

この関数を含むタプルのリストを返します:

IDを - 子供の仕様で定義されているかのように:simple_one_for_oneスーパーバイザの場合は未定義

子 - 対応する子プロセスのpid、アトム:プロセスが再起動される場合再起動、またはそのようなプロセスがない場合は未定義

タイプ - :労働者や:子仕様で定義された

モジュールのような監督 - typepidはあなたが再帰的に生成するために、子供たちを取得することができます提供されているので、子どもの仕様

で定義されています必要に応じてすべてのpidのリスト。