Sophie

Sophie

distrib > Mageia > 7 > i586 > media > core-release > by-pkgid > 016232f1d9a3f7bee85855d35a2bca58 > files > 50

elixir-doc-1.7.2-1.mga7.noarch.rpm

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="generator" content="ExDoc v0.19.1">
    <title>DynamicSupervisor – Elixir v1.7.2</title>
    <link rel="stylesheet" href="dist/app-240d7fc7e5.css" />
      <link rel="canonical" href="https://hexdocs.pm/elixir/v1.7/DynamicSupervisor.html" />
    <script src="dist/sidebar_items-cdf4e58b19.js"></script>
    
  </head>
  <body data-type="modules">
    <script>try { if(localStorage.getItem('night-mode')) document.body.className += ' night-mode'; } catch (e) { }</script>
    <div class="main">
<button class="sidebar-button sidebar-toggle">
  <span class="icon-menu" aria-hidden="true"></span>
  <span class="sr-only">Toggle Sidebar</span>
</button>
<button class="sidebar-button night-mode-toggle">
  <span class="icon-theme" aria-hidden="true"></span>
  <span class="sr-only">Toggle Theme</span>
</button>
<section class="sidebar">

  <a href="http://elixir-lang.org/docs.html" class="sidebar-projectLink">
    <div class="sidebar-projectDetails">
      <h1 class="sidebar-projectName">
Elixir      </h1>
      <h2 class="sidebar-projectVersion">
        v1.7.2
      </h2>
    </div>
      <img src="assets/logo.png" alt="Elixir" class="sidebar-projectImage">
  </a>

  <form class="sidebar-search" action="search.html">
    <button type="submit" class="search-button">
      <span class="icon-search" aria-hidden="true"></span>
    </button>
    <input name="q" type="text" id="search-list" class="search-input" placeholder="Search" aria-label="Search" autocomplete="off" />
  </form>

  <ul class="sidebar-listNav">
    <li><a id="extras-list" href="#full-list">Pages</a></li>

      <li><a id="modules-list" href="#full-list">Modules</a></li>

      <li><a id="exceptions-list" href="#full-list">Exceptions</a></li>

  </ul>
  <div class="gradient"></div>
  <ul id="full-list" class="sidebar-fullList"></ul>
</section>

<section class="content">
  <div class="content-outer">
    <div id="content" class="content-inner">


      <h1>
        <small class="visible-xs">Elixir v1.7.2</small>
DynamicSupervisor <small>behaviour</small>        
          <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L1" title="View Source" class="view-source" rel="help">
            <span class="icon-code" aria-hidden="true"></span>
            <span class="sr-only">View Source</span>
          </a>
      </h1>


        <section id="moduledoc">
<p>A supervisor that starts children dynamically.</p>
<p>The <a href="Supervisor.html"><code class="inline">Supervisor</code></a> module was designed to handle mostly static children
that are started in the given order when the supervisor starts. A
<a href="DynamicSupervisor.html#content"><code class="inline">DynamicSupervisor</code></a> starts with no children. Instead, children are
started on demand via <a href="#start_child/2"><code class="inline">start_child/2</code></a>. When a dynamic supervisor
terminates, all children are shutdown at the same time, with no guarantee
of ordering.</p>
<h2 id="module-examples" class="section-heading">
  <a href="#module-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<p>A dynamic supervisor is started with no children, often under a
supervisor with the supervision strategy (the only strategy currently
supported is <code class="inline">:one_for_one</code>) and a name:</p>
<pre><code class="nohighlight makeup elixir"><span class="n">children</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p" data-group-id="8807383193-1">[</span><span class="w">
  </span><span class="p" data-group-id="8807383193-2">{</span><span class="nc">DynamicSupervisor</span><span class="p">,</span><span class="w"> </span><span class="ss">strategy</span><span class="p">:</span><span class="w"> </span><span class="ss">:one_for_one</span><span class="p">,</span><span class="w"> </span><span class="ss">name</span><span class="p">:</span><span class="w"> </span><span class="nc">MyApp.DynamicSupervisor</span><span class="p" data-group-id="8807383193-2">}</span><span class="w">
</span><span class="p" data-group-id="8807383193-1">]</span><span class="w">

</span><span class="nc">Supervisor</span><span class="o">.</span><span class="n">start_link</span><span class="p" data-group-id="8807383193-3">(</span><span class="n">children</span><span class="p">,</span><span class="w"> </span><span class="ss">strategy</span><span class="p">:</span><span class="w"> </span><span class="ss">:one_for_one</span><span class="p" data-group-id="8807383193-3">)</span></code></pre>
<p>The options given in the child specification are documented in <a href="#start_link/1"><code class="inline">start_link/1</code></a>.</p>
<p>Once the dynamic supervisor is running, we can start children
with <a href="#start_child/2"><code class="inline">start_child/2</code></a>, which receives a child specification:</p>
<pre><code class="nohighlight makeup elixir"><span class="p" data-group-id="3293445163-1">{</span><span class="ss">:ok</span><span class="p">,</span><span class="w"> </span><span class="n">agent1</span><span class="p" data-group-id="3293445163-1">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">DynamicSupervisor</span><span class="o">.</span><span class="n">start_child</span><span class="p" data-group-id="3293445163-2">(</span><span class="nc">MyApp.DynamicSupervisor</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="3293445163-3">{</span><span class="nc">Agent</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="3293445163-4">fn</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="p" data-group-id="3293445163-5">%{</span><span class="p" data-group-id="3293445163-5">}</span><span class="w"> </span><span class="k" data-group-id="3293445163-4">end</span><span class="p" data-group-id="3293445163-3">}</span><span class="p" data-group-id="3293445163-2">)</span><span class="w">
</span><span class="nc">Agent</span><span class="o">.</span><span class="n">update</span><span class="p" data-group-id="3293445163-6">(</span><span class="n">agent1</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="nc">Map</span><span class="o">.</span><span class="n">put</span><span class="p" data-group-id="3293445163-7">(</span><span class="ni">&amp;1</span><span class="p">,</span><span class="w"> </span><span class="ss">:key</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;value&quot;</span><span class="p" data-group-id="3293445163-7">)</span><span class="p" data-group-id="3293445163-6">)</span><span class="w">
</span><span class="nc">Agent</span><span class="o">.</span><span class="n">get</span><span class="p" data-group-id="3293445163-8">(</span><span class="n">agent1</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="ni">&amp;1</span><span class="p" data-group-id="3293445163-8">)</span><span class="w">
</span><span class="c1">#=&gt; %{key: &quot;value&quot;}</span><span class="w">

</span><span class="p" data-group-id="3293445163-9">{</span><span class="ss">:ok</span><span class="p">,</span><span class="w"> </span><span class="n">agent2</span><span class="p" data-group-id="3293445163-9">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">DynamicSupervisor</span><span class="o">.</span><span class="n">start_child</span><span class="p" data-group-id="3293445163-10">(</span><span class="nc">MyApp.DynamicSupervisor</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="3293445163-11">{</span><span class="nc">Agent</span><span class="p">,</span><span class="w"> </span><span class="k" data-group-id="3293445163-12">fn</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="p" data-group-id="3293445163-13">%{</span><span class="p" data-group-id="3293445163-13">}</span><span class="w"> </span><span class="k" data-group-id="3293445163-12">end</span><span class="p" data-group-id="3293445163-11">}</span><span class="p" data-group-id="3293445163-10">)</span><span class="w">
</span><span class="nc">Agent</span><span class="o">.</span><span class="n">get</span><span class="p" data-group-id="3293445163-14">(</span><span class="n">agent2</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="ni">&amp;1</span><span class="p" data-group-id="3293445163-14">)</span><span class="w">
</span><span class="c1">#=&gt; %{}</span><span class="w">

</span><span class="nc">DynamicSupervisor</span><span class="o">.</span><span class="n">count_children</span><span class="p" data-group-id="3293445163-15">(</span><span class="nc">MyApp.DynamicSupervisor</span><span class="p" data-group-id="3293445163-15">)</span><span class="w">
</span><span class="c1">#=&gt; %{active: 2, specs: 2, supervisors: 0, workers: 2}</span></code></pre>
<h2 id="module-module-based-supervisors" class="section-heading">
  <a href="#module-module-based-supervisors" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Module-based supervisors
</h2>

<p>Similar to <a href="Supervisor.html"><code class="inline">Supervisor</code></a>, dynamic supervisors also support module-based
supervisors.</p>
<pre><code class="nohighlight makeup elixir"><span class="kd">defmodule</span><span class="w"> </span><span class="nc">MyApp.DynamicSupervisor</span><span class="w"> </span><span class="k" data-group-id="9926862281-1">do</span><span class="w">
  </span><span class="c1"># Automatically defines child_spec/1</span><span class="w">
  </span><span class="kn">use</span><span class="w"> </span><span class="nc">DynamicSupervisor</span><span class="w">

  </span><span class="kd">def</span><span class="w"> </span><span class="nf">start_link</span><span class="p" data-group-id="9926862281-2">(</span><span class="n">arg</span><span class="p" data-group-id="9926862281-2">)</span><span class="w"> </span><span class="k" data-group-id="9926862281-3">do</span><span class="w">
    </span><span class="nc">DynamicSupervisor</span><span class="o">.</span><span class="n">start_link</span><span class="p" data-group-id="9926862281-4">(</span><span class="bp">__MODULE__</span><span class="p">,</span><span class="w"> </span><span class="n">arg</span><span class="p">,</span><span class="w"> </span><span class="ss">name</span><span class="p">:</span><span class="w"> </span><span class="bp">__MODULE__</span><span class="p" data-group-id="9926862281-4">)</span><span class="w">
  </span><span class="k" data-group-id="9926862281-3">end</span><span class="w">

  </span><span class="na">@impl</span><span class="w"> </span><span class="no">true</span><span class="w">
  </span><span class="kd">def</span><span class="w"> </span><span class="nf">init</span><span class="p" data-group-id="9926862281-5">(</span><span class="c">_arg</span><span class="p" data-group-id="9926862281-5">)</span><span class="w"> </span><span class="k" data-group-id="9926862281-6">do</span><span class="w">
    </span><span class="nc">DynamicSupervisor</span><span class="o">.</span><span class="n">init</span><span class="p" data-group-id="9926862281-7">(</span><span class="ss">strategy</span><span class="p">:</span><span class="w"> </span><span class="ss">:one_for_one</span><span class="p" data-group-id="9926862281-7">)</span><span class="w">
  </span><span class="k" data-group-id="9926862281-6">end</span><span class="w">
</span><span class="k" data-group-id="9926862281-1">end</span></code></pre>
<p>See the <a href="Supervisor.html"><code class="inline">Supervisor</code></a> docs for a discussion of when you may want to use
module-based supervisors.</p>
<h2 id="module-name-registration" class="section-heading">
  <a href="#module-name-registration" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Name registration
</h2>

<p>A supervisor is bound to the same name registration rules as a <a href="GenServer.html"><code class="inline">GenServer</code></a>.
Read more about these rules in the documentation for <a href="GenServer.html"><code class="inline">GenServer</code></a>.</p>
<h2 id="module-migrating-from-supervisor-s-simple_one_for_one" class="section-heading">
  <a href="#module-migrating-from-supervisor-s-simple_one_for_one" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Migrating from Supervisor’s :simple_one_for_one
</h2>

<p>In case you were using the deprecated <code class="inline">:simple_one_for_one</code> strategy from
the <a href="Supervisor.html"><code class="inline">Supervisor</code></a> module, you can migrate to the <a href="DynamicSupervisor.html#content"><code class="inline">DynamicSupervisor</code></a> in
few steps.</p>
<p>Imagine the given “old” code:</p>
<pre><code class="nohighlight makeup elixir"><span class="kd">defmodule</span><span class="w"> </span><span class="nc">MySupervisor</span><span class="w"> </span><span class="k" data-group-id="7409333693-1">do</span><span class="w">
  </span><span class="kn">use</span><span class="w"> </span><span class="nc">Supervisor</span><span class="w">

  </span><span class="kd">def</span><span class="w"> </span><span class="nf">start_link</span><span class="p" data-group-id="7409333693-2">(</span><span class="n">arg</span><span class="p" data-group-id="7409333693-2">)</span><span class="w"> </span><span class="k" data-group-id="7409333693-3">do</span><span class="w">
    </span><span class="nc">Supervisor</span><span class="o">.</span><span class="n">start_link</span><span class="p" data-group-id="7409333693-4">(</span><span class="bp">__MODULE__</span><span class="p">,</span><span class="w"> </span><span class="n">arg</span><span class="p">,</span><span class="w"> </span><span class="ss">name</span><span class="p">:</span><span class="w"> </span><span class="bp">__MODULE__</span><span class="p" data-group-id="7409333693-4">)</span><span class="w">
  </span><span class="k" data-group-id="7409333693-3">end</span><span class="w">

  </span><span class="kd">def</span><span class="w"> </span><span class="nf">start_child</span><span class="p" data-group-id="7409333693-5">(</span><span class="n">foo</span><span class="p">,</span><span class="w"> </span><span class="n">bar</span><span class="p">,</span><span class="w"> </span><span class="n">baz</span><span class="p" data-group-id="7409333693-5">)</span><span class="w"> </span><span class="k" data-group-id="7409333693-6">do</span><span class="w">
    </span><span class="c1"># This will start child by calling MyWorker.start_link(initial_arg, foo, bar, baz)</span><span class="w">
    </span><span class="nc">Supervisor</span><span class="o">.</span><span class="n">start_child</span><span class="p" data-group-id="7409333693-7">(</span><span class="bp">__MODULE__</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7409333693-8">[</span><span class="n">foo</span><span class="p">,</span><span class="w"> </span><span class="n">bar</span><span class="p">,</span><span class="w"> </span><span class="n">baz</span><span class="p" data-group-id="7409333693-8">]</span><span class="p" data-group-id="7409333693-7">)</span><span class="w">
  </span><span class="k" data-group-id="7409333693-6">end</span><span class="w">

  </span><span class="na">@impl</span><span class="w"> </span><span class="no">true</span><span class="w">
  </span><span class="kd">def</span><span class="w"> </span><span class="nf">init</span><span class="p" data-group-id="7409333693-9">(</span><span class="n">initial_arg</span><span class="p" data-group-id="7409333693-9">)</span><span class="w"> </span><span class="k" data-group-id="7409333693-10">do</span><span class="w">
    </span><span class="n">children</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p" data-group-id="7409333693-11">[</span><span class="w">
      </span><span class="c1"># Or the deprecated: worker(MyWorker, [initial_arg])</span><span class="w">
      </span><span class="p">%</span><span class="err">{</span><span class="ss">id</span><span class="p">:</span><span class="w"> </span><span class="nc">MyWorker</span><span class="p">,</span><span class="w"> </span><span class="ss">start</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="7409333693-12">{</span><span class="nc">MyWorker</span><span class="p">,</span><span class="w"> </span><span class="ss">:start_link</span><span class="p">,</span><span class="w"> </span><span class="p" data-group-id="7409333693-13">[</span><span class="n">initial_arg</span><span class="p" data-group-id="7409333693-13">]</span><span class="p" data-group-id="7409333693-12">}</span><span class="p">)</span><span class="w">
    </span><span class="p" data-group-id="7409333693-11">]</span><span class="w">

    </span><span class="nc">Supervisor</span><span class="o">.</span><span class="n">init</span><span class="p" data-group-id="7409333693-14">(</span><span class="n">children</span><span class="p">,</span><span class="w"> </span><span class="ss">strategy</span><span class="p">:</span><span class="w"> </span><span class="ss">:simple_one_for_one</span><span class="p" data-group-id="7409333693-14">)</span><span class="w">
  </span><span class="k" data-group-id="7409333693-10">end</span><span class="w">
</span><span class="k" data-group-id="7409333693-1">end</span></code></pre>
<p>It can be upgraded to the DynamicSupervisor like this:</p>
<pre><code class="nohighlight makeup elixir"><span class="kd">defmodule</span><span class="w"> </span><span class="nc">MySupervisor</span><span class="w"> </span><span class="k" data-group-id="4636975147-1">do</span><span class="w">
  </span><span class="kn">use</span><span class="w"> </span><span class="nc">DynamicSupervisor</span><span class="w">

  </span><span class="kd">def</span><span class="w"> </span><span class="nf">start_link</span><span class="p" data-group-id="4636975147-2">(</span><span class="n">arg</span><span class="p" data-group-id="4636975147-2">)</span><span class="w"> </span><span class="k" data-group-id="4636975147-3">do</span><span class="w">
    </span><span class="nc">DynamicSupervisor</span><span class="o">.</span><span class="n">start_link</span><span class="p" data-group-id="4636975147-4">(</span><span class="bp">__MODULE__</span><span class="p">,</span><span class="w"> </span><span class="n">arg</span><span class="p">,</span><span class="w"> </span><span class="ss">name</span><span class="p">:</span><span class="w"> </span><span class="bp">__MODULE__</span><span class="p" data-group-id="4636975147-4">)</span><span class="w">
  </span><span class="k" data-group-id="4636975147-3">end</span><span class="w">

  </span><span class="kd">def</span><span class="w"> </span><span class="nf">start_child</span><span class="p" data-group-id="4636975147-5">(</span><span class="n">foo</span><span class="p">,</span><span class="w"> </span><span class="n">bar</span><span class="p">,</span><span class="w"> </span><span class="n">baz</span><span class="p" data-group-id="4636975147-5">)</span><span class="w"> </span><span class="k" data-group-id="4636975147-6">do</span><span class="w">
    </span><span class="c1"># If MyWorker is not using the new child specs, we need to pass a map:</span><span class="w">
    </span><span class="c1"># spec = %{id: MyWorker, start: {MyWorker, :start_link, [foo, bar, baz]}}</span><span class="w">
    </span><span class="n">spec</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p" data-group-id="4636975147-7">{</span><span class="nc">MyWorker</span><span class="p">,</span><span class="w"> </span><span class="ss">foo</span><span class="p">:</span><span class="w"> </span><span class="n">foo</span><span class="p">,</span><span class="w"> </span><span class="ss">bar</span><span class="p">:</span><span class="w"> </span><span class="n">bar</span><span class="p">,</span><span class="w"> </span><span class="ss">baz</span><span class="p">:</span><span class="w"> </span><span class="n">baz</span><span class="p" data-group-id="4636975147-7">}</span><span class="w">
    </span><span class="nc">DynamicSupervisor</span><span class="o">.</span><span class="n">start_child</span><span class="p" data-group-id="4636975147-8">(</span><span class="bp">__MODULE__</span><span class="p">,</span><span class="w"> </span><span class="n">spec</span><span class="p" data-group-id="4636975147-8">)</span><span class="w">
  </span><span class="k" data-group-id="4636975147-6">end</span><span class="w">

  </span><span class="na">@impl</span><span class="w"> </span><span class="no">true</span><span class="w">
  </span><span class="kd">def</span><span class="w"> </span><span class="nf">init</span><span class="p" data-group-id="4636975147-9">(</span><span class="n">initial_arg</span><span class="p" data-group-id="4636975147-9">)</span><span class="w"> </span><span class="k" data-group-id="4636975147-10">do</span><span class="w">
    </span><span class="nc">DynamicSupervisor</span><span class="o">.</span><span class="n">init</span><span class="p" data-group-id="4636975147-11">(</span><span class="w">
      </span><span class="ss">strategy</span><span class="p">:</span><span class="w"> </span><span class="ss">:one_for_one</span><span class="p">,</span><span class="w">
      </span><span class="ss">extra_arguments</span><span class="p">:</span><span class="w"> </span><span class="p" data-group-id="4636975147-12">[</span><span class="n">initial_arg</span><span class="p" data-group-id="4636975147-12">]</span><span class="w">
    </span><span class="p" data-group-id="4636975147-11">)</span><span class="w">
  </span><span class="k" data-group-id="4636975147-10">end</span><span class="w">
</span><span class="k" data-group-id="4636975147-1">end</span></code></pre>
<p>The difference is that the <a href="DynamicSupervisor.html#content"><code class="inline">DynamicSupervisor</code></a> expects the child specification
at the moment <a href="#start_child/2"><code class="inline">start_child/2</code></a> is called, and no longer on the init callback.
If there are any initial arguments given on initialization, such as <code class="inline">[initial_arg]</code>,
it can be given in the <code class="inline">:extra_arguments</code> flag on <a href="DynamicSupervisor.html#init/1"><code class="inline">DynamicSupervisor.init/1</code></a>.</p>
        </section>

        <section id="summary" class="details-list">
          <h1 class="section-heading">
            <a class="hover-link" href="#summary">
              <span class="icon-link" aria-hidden="true"></span>
              <span class="sr-only">Link to this section</span>
            </a>
            Summary
          </h1>
  <div class="summary-types summary">
    <h2>
      <a href="#types">Types</a>
    </h2>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#t:init_option/0">init_option()</a>
  </div>
    <div class="summary-synopsis"><p>Options given to <a href="#start_link/2"><code class="inline">start_link/2</code></a> and <a href="#init/1"><code class="inline">init/1</code></a></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#t:on_start_child/0">on_start_child()</a>
  </div>
    <div class="summary-synopsis"><p>Return values of <code class="inline">start_child</code> functions</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#t:option/0">option()</a>
  </div>
    <div class="summary-synopsis"><p>Option values used by the <code class="inline">start*</code> functions</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#t:options/0">options()</a>
  </div>
    <div class="summary-synopsis"><p>Options used by the <code class="inline">start*</code> functions</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#t:strategy/0">strategy()</a>
  </div>
    <div class="summary-synopsis"><p>Supported strategies</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#t:sup_flags/0">sup_flags()</a>
  </div>
    <div class="summary-synopsis"><p>The supervisor flags returned on init</p>
</div>
</div>
  </div>
          
  <div class="summary-functions summary">
    <h2>
      <a href="#functions">Functions</a>
    </h2>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#child_spec/1">child_spec(opts)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a specification to start a dynamic supervisor under a supervisor</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#count_children/1">count_children(supervisor)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a map containing count values for the supervisor</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#init/1">init(options)</a>
  </div>
    <div class="summary-synopsis"><p>Receives a set of options that initializes a dynamic supervisor</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#start_child/2">start_child(supervisor, child_spec)</a>
  </div>
    <div class="summary-synopsis"><p>Dynamically adds a child specification to <code class="inline">supervisor</code> and starts that child</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#start_link/1">start_link(options)</a>
  </div>
    <div class="summary-synopsis"><p>Starts a supervisor with the given options</p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#start_link/3">start_link(mod, args, opts \\ [])</a>
  </div>
    <div class="summary-synopsis"><p>Starts a module-based supervisor process with the given <code class="inline">module</code> and <code class="inline">arg</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#stop/3">stop(supervisor, reason \\ :normal, timeout \\ :infinity)</a>
  </div>
    <div class="summary-synopsis"><p>Synchronously stops the given supervisor with the given <code class="inline">reason</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#terminate_child/2">terminate_child(supervisor, pid)</a>
  </div>
    <div class="summary-synopsis"><p>Terminates the given child identified by <code class="inline">pid</code></p>
</div>
</div>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#which_children/1">which_children(supervisor)</a>
  </div>
    <div class="summary-synopsis"><p>Returns a list with information about all children</p>
</div>
</div>
  </div>
            <div class="summary-callbacks summary">
    <h2>
      <a href="#callbacks">Callbacks</a>
    </h2>
<div class="summary-row">
  <div class="summary-signature">
    <a href="#c:init/1">init(args)</a>
  </div>
    <div class="summary-synopsis"><p>Callback invoked to start the supervisor and during hot code upgrades</p>
</div>
</div>
  </div>

        </section>

        <section id="types" class="details-list">
          <h1 class="section-heading">
            <a class="hover-link" href="#types">
              <span class="icon-link" aria-hidden="true"></span>
              <span class="sr-only">Link to this section</span>
            </a>
            Types
          </h1>
          <div class="types-list">
<div class="detail" id="t:init_option/0">
    <div class="detail-header">
    <a href="#t:init_option/0" class="detail-link" title="Link to this type">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this type</span>
    </a>
    <span class="signature">init_option()</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L156" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>init_option() ::
  {:strategy, <a href="#t:strategy/0">strategy</a>()}
  | {:max_restarts, <a href="typespecs.html#basic-types">non_neg_integer</a>()}
  | {:max_seconds, <a href="typespecs.html#basic-types">pos_integer</a>()}
  | {:max_children, <a href="typespecs.html#basic-types">non_neg_integer</a>() | :infinity}
  | {:extra_arguments, [<a href="typespecs.html#built-in-types">term</a>()]}</pre>
      </div>
  </div>
  <section class="docstring">
<p>Options given to <a href="#start_link/2"><code class="inline">start_link/2</code></a> and <a href="#init/1"><code class="inline">init/1</code></a></p>
  </section>
</div>
<div class="detail" id="t:on_start_child/0">
    <div class="detail-header">
    <a href="#t:on_start_child/0" class="detail-link" title="Link to this type">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this type</span>
    </a>
    <span class="signature">on_start_child()</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L167" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>on_start_child() ::
  {:ok, <a href="typespecs.html#basic-types">pid</a>()}
  | {:ok, <a href="typespecs.html#basic-types">pid</a>(), info :: <a href="typespecs.html#built-in-types">term</a>()}
  | :ignore
  | {:error, {:already_started, <a href="typespecs.html#basic-types">pid</a>()} | :max_children | <a href="typespecs.html#built-in-types">term</a>()}</pre>
      </div>
  </div>
  <section class="docstring">
<p>Return values of <code class="inline">start_child</code> functions</p>
  </section>
</div>
<div class="detail" id="t:option/0">
    <div class="detail-header">
    <a href="#t:option/0" class="detail-link" title="Link to this type">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this type</span>
    </a>
    <span class="signature">option()</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L150" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>option() :: {:name, <a href="Supervisor.html#t:name/0">Supervisor.name</a>()} | <a href="#t:init_option/0">init_option</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Option values used by the <code class="inline">start*</code> functions</p>
  </section>
</div>
<div class="detail" id="t:options/0">
    <div class="detail-header">
    <a href="#t:options/0" class="detail-link" title="Link to this type">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this type</span>
    </a>
    <span class="signature">options()</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L153" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>options() :: [<a href="#t:option/0">option</a>(), ...]</pre>
      </div>
  </div>
  <section class="docstring">
<p>Options used by the <code class="inline">start*</code> functions</p>
  </section>
</div>
<div class="detail" id="t:strategy/0">
    <div class="detail-header">
    <a href="#t:strategy/0" class="detail-link" title="Link to this type">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this type</span>
    </a>
    <span class="signature">strategy()</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L164" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>strategy() :: :one_for_one</pre>
      </div>
  </div>
  <section class="docstring">
<p>Supported strategies</p>
  </section>
</div>
<div class="detail" id="t:sup_flags/0">
    <div class="detail-header">
    <a href="#t:sup_flags/0" class="detail-link" title="Link to this type">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this type</span>
    </a>
    <span class="signature">sup_flags()</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L141" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>sup_flags() :: %{
  strategy: <a href="#t:strategy/0">strategy</a>(),
  intensity: <a href="typespecs.html#basic-types">non_neg_integer</a>(),
  period: <a href="typespecs.html#basic-types">pos_integer</a>(),
  max_children: <a href="typespecs.html#basic-types">non_neg_integer</a>() | :infinity,
  extra_arguments: [<a href="typespecs.html#built-in-types">term</a>()]
}</pre>
      </div>
  </div>
  <section class="docstring">
<p>The supervisor flags returned on init</p>
  </section>
</div>
          </div>
        </section>


        <section id="functions" class="details-list">
          <h1 class="section-heading">
            <a class="hover-link" href="#functions">
              <span class="icon-link" aria-hidden="true"></span>
              <span class="sr-only">Link to this section</span>
            </a>
            Functions
          </h1>
<div class="detail" id="child_spec/1">
    <div class="detail-header">
    <a href="#child_spec/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">child_spec(opts)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L192" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
    
      <span class="note">(since 1.6.1)</span>
      </div>
  <section class="docstring">
<p>Returns a specification to start a dynamic supervisor under a supervisor.</p>
<p>See <a href="Supervisor.html"><code class="inline">Supervisor</code></a>.</p>
  </section>
</div>
<div class="detail" id="count_children/1">
    <div class="detail-header">
    <a href="#count_children/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">count_children(supervisor)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L444" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
    
      <span class="note">(since 1.6.0)</span>
    
      <div class="specs">
          <pre>count_children(<a href="Supervisor.html#t:supervisor/0">Supervisor.supervisor</a>()) :: %{
  specs: <a href="typespecs.html#basic-types">non_neg_integer</a>(),
  active: <a href="typespecs.html#basic-types">non_neg_integer</a>(),
  supervisors: <a href="typespecs.html#basic-types">non_neg_integer</a>(),
  workers: <a href="typespecs.html#basic-types">non_neg_integer</a>()
}</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a map containing count values for the supervisor.</p>
<p>The map contains the following keys:</p>
<ul>
<li><p><code class="inline">:specs</code> - the number of children processes</p>
</li>
<li><p><code class="inline">:active</code> - the count of all actively running child processes managed by
this supervisor</p>
</li>
<li><p><code class="inline">:supervisors</code> - the count of all supervisors whether or not the child
process is still alive</p>
</li>
<li><p><code class="inline">:workers</code> - the count of all workers, whether or not the child process
is still alive</p>
</li>
</ul>
  </section>
</div>
<div class="detail" id="init/1">
    <div class="detail-header">
    <a href="#init/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">init(options)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L530" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
    
      <span class="note">(since 1.6.0)</span>
    
      <div class="specs">
          <pre>init([<a href="#t:init_option/0">init_option</a>()]) :: {:ok, <a href="#t:sup_flags/0">sup_flags</a>()}</pre>
      </div>
  </div>
  <section class="docstring">
<p>Receives a set of options that initializes a dynamic supervisor.</p>
<p>This is typically invoked at the end of the <a href="#c:init/1"><code class="inline">init/1</code></a> callback of
module-based supervisors. See the sections “Module-based supervisors”
in the module documentation for more information.</p>
<p>The options received by this function are also supported by <a href="#start_link/2"><code class="inline">start_link/2</code></a>.</p>
<p>This function returns a tuple containing the supervisor options.</p>
<h2 id="init/1-examples" class="section-heading">
  <a href="#init/1-examples" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Examples
</h2>

<pre><code class="nohighlight makeup elixir"><span class="kd">def</span><span class="w"> </span><span class="nf">init</span><span class="p" data-group-id="8807558092-1">(</span><span class="c">_arg</span><span class="p" data-group-id="8807558092-1">)</span><span class="w"> </span><span class="k" data-group-id="8807558092-2">do</span><span class="w">
  </span><span class="nc">DynamicSupervisor</span><span class="o">.</span><span class="n">init</span><span class="p" data-group-id="8807558092-3">(</span><span class="ss">max_children</span><span class="p">:</span><span class="w"> </span><span class="mi">1000</span><span class="p">,</span><span class="w"> </span><span class="ss">strategy</span><span class="p">:</span><span class="w"> </span><span class="ss">:one_for_one</span><span class="p" data-group-id="8807558092-3">)</span><span class="w">
</span><span class="k" data-group-id="8807558092-2">end</span></code></pre>
<h2 id="init/1-options" class="section-heading">
  <a href="#init/1-options" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
  Options
</h2>

<ul>
<li><p><code class="inline">:strategy</code> - the restart strategy option. The only supported
value is <code class="inline">:one_for_one</code> which means that no other child is
terminate if a child process terminates. You can learn more
about strategies in the <a href="Supervisor.html"><code class="inline">Supervisor</code></a> module docs.</p>
</li>
<li><p><code class="inline">:max_restarts</code> - the maximum number of restarts allowed in
a time frame. Defaults to <code class="inline">3</code>.</p>
</li>
<li><p><code class="inline">:max_seconds</code> - the time frame in which <code class="inline">:max_restarts</code> applies.
Defaults to <code class="inline">5</code>.</p>
</li>
<li><p><code class="inline">:max_children</code> - the maximum amount of children to be running
under this supervisor at the same time. When <code class="inline">:max_children</code> is
exceeded, <a href="#start_child/2"><code class="inline">start_child/2</code></a> returns <code class="inline">{:error, :max_children}</code>. Defaults
to <code class="inline">:infinity</code>.</p>
</li>
<li><p><code class="inline">:extra_arguments</code> - arguments that are prepended to the arguments
specified in the child spec given to <a href="#start_child/2"><code class="inline">start_child/2</code></a>. Defaults to
an empty list.</p>
</li>
</ul>
  </section>
</div>
<div class="detail" id="start_child/2">
    <div class="detail-header">
    <a href="#start_child/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">start_child(supervisor, child_spec)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L314" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
    
      <span class="note">(since 1.6.0)</span>
    
      <div class="specs">
          <pre>start_child(
  <a href="Supervisor.html#t:supervisor/0">Supervisor.supervisor</a>(),
  <a href="http://www.erlang.org/doc/man/supervisor.html#type-child_spec">:supervisor.child_spec</a>() | {<a href="typespecs.html#built-in-types">module</a>(), <a href="typespecs.html#built-in-types">term</a>()} | <a href="typespecs.html#built-in-types">module</a>()
) :: <a href="#t:on_start_child/0">on_start_child</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Dynamically adds a child specification to <code class="inline">supervisor</code> and starts that child.</p>
<p><code class="inline">child_spec</code> should be a valid child specification as detailed in the
“child_spec/1” section of the documentation for <a href="Supervisor.html"><code class="inline">Supervisor</code></a>. The child
process will be started as defined in the child specification.</p>
<p>If the child process start function returns <code class="inline">{:ok, child}</code> or <code class="inline">{:ok, child,
info}</code>, then child specification and PID are added to the supervisor and
this function returns the same value.</p>
<p>If the child process start function returns <code class="inline">:ignore</code>, then no child is added
to the supervision tree and this function returns <code class="inline">:ignore</code> too.</p>
<p>If the child process start function returns an error tuple or an erroneous
value, or if it fails, the child specification is discarded and this function
returns <code class="inline">{:error, error}</code> where <code class="inline">error</code> is a term containing information about
the error and child specification.</p>
<p>If the supervisor already has N children in a way that N exceeds the amount
of <code class="inline">:max_children</code> set on the supervisor initialization (see <a href="#init/1"><code class="inline">init/1</code></a>), then
this function returns <code class="inline">{:error, :max_children}</code>.</p>
  </section>
</div>
<div class="detail" id="start_link/1">
    <div class="detail-header">
    <a href="#start_link/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">start_link(options)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L254" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
    
      <span class="note">(since 1.6.0)</span>
    
      <div class="specs">
          <pre>start_link(<a href="#t:options/0">options</a>()) :: <a href="Supervisor.html#t:on_start/0">Supervisor.on_start</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Starts a supervisor with the given options.</p>
<p>The <code class="inline">:strategy</code> is a required option and the currently supported
value is <code class="inline">:one_for_one</code>. The remaining options can be found in the
<a href="#init/1"><code class="inline">init/1</code></a> docs.</p>
<p>The <code class="inline">:name</code> option can also be used to register a supervisor name.
The supported values are described under the “Name registration”
section in the <a href="GenServer.html"><code class="inline">GenServer</code></a> module docs.</p>
<p>If the supervisor is successfully spawned, this function returns
<code class="inline">{:ok, pid}</code>, where <code class="inline">pid</code> is the PID of the supervisor. If the supervisor
is given a name and a process with the specified name already exists,
the function returns <code class="inline">{:error, {:already_started, pid}}</code>, where <code class="inline">pid</code>
is the PID of that process.</p>
<p>Note that a supervisor started with this function is linked to the parent
process and exits not only on crashes but also if the parent process exits
with <code class="inline">:normal</code> reason.</p>
  </section>
</div>
<div class="detail" id="start_link/3">
  
    <span id="start_link/2"></span>
  <div class="detail-header">
    <a href="#start_link/3" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">start_link(mod, args, opts \\ [])</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L280" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
    
      <span class="note">(since 1.6.0)</span>
    
      <div class="specs">
          <pre>start_link(<a href="typespecs.html#built-in-types">module</a>(), <a href="typespecs.html#built-in-types">term</a>(), <a href="GenServer.html#t:options/0">GenServer.options</a>()) :: <a href="Supervisor.html#t:on_start/0">Supervisor.on_start</a>()</pre>
      </div>
  </div>
  <section class="docstring">
<p>Starts a module-based supervisor process with the given <code class="inline">module</code> and <code class="inline">arg</code>.</p>
<p>To start the supervisor, the <a href="#c:init/1"><code class="inline">init/1</code></a> callback will be invoked in the given
<code class="inline">module</code>, with <code class="inline">arg</code> as its argument. The <a href="#c:init/1"><code class="inline">init/1</code></a> callback must return a
supervisor specification which can be created with the help of the <a href="#init/1"><code class="inline">init/1</code></a>
function.</p>
<p>If the <a href="#c:init/1"><code class="inline">init/1</code></a> callback returns <code class="inline">:ignore</code>, this function returns
<code class="inline">:ignore</code> as well and the supervisor terminates with reason <code class="inline">:normal</code>.
If it fails or returns an incorrect value, this function returns
<code class="inline">{:error, term}</code> where <code class="inline">term</code> is a term with information about the
error, and the supervisor terminates with reason <code class="inline">term</code>.</p>
<p>The <code class="inline">:name</code> option can also be given in order to register a supervisor
name, the supported values are described in the “Name registration”
section in the <a href="GenServer.html"><code class="inline">GenServer</code></a> module docs.</p>
  </section>
</div>
<div class="detail" id="stop/3">
  
    <span id="stop/1"></span>

    <span id="stop/2"></span>
  <div class="detail-header">
    <a href="#stop/3" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">stop(supervisor, reason \\ :normal, timeout \\ :infinity)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L460" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
    
      <span class="note">(since 1.7.0)</span>
    
      <div class="specs">
          <pre>stop(<a href="Supervisor.html#t:supervisor/0">Supervisor.supervisor</a>(), reason :: <a href="typespecs.html#built-in-types">term</a>(), <a href="typespecs.html#built-in-types">timeout</a>()) :: :ok</pre>
      </div>
  </div>
  <section class="docstring">
<p>Synchronously stops the given supervisor with the given <code class="inline">reason</code>.</p>
<p>It returns <code class="inline">:ok</code> if the supervisor terminates with the given
reason. If it terminates with another reason, the call exits.</p>
<p>This function keeps OTP semantics regarding error reporting.
If the reason is any other than <code class="inline">:normal</code>, <code class="inline">:shutdown</code> or
<code class="inline">{:shutdown, _}</code>, an error report is logged.</p>
  </section>
</div>
<div class="detail" id="terminate_child/2">
    <div class="detail-header">
    <a href="#terminate_child/2" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">terminate_child(supervisor, pid)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L388" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
    
      <span class="note">(since 1.6.0)</span>
    
      <div class="specs">
          <pre>terminate_child(<a href="Supervisor.html#t:supervisor/0">Supervisor.supervisor</a>(), <a href="typespecs.html#basic-types">pid</a>()) :: :ok | {:error, :not_found}</pre>
      </div>
  </div>
  <section class="docstring">
<p>Terminates the given child identified by <code class="inline">pid</code>.</p>
<p>If successful, this function returns <code class="inline">:ok</code>. If there is no process with
the given PID, this function returns <code class="inline">{:error, :not_found}</code>.</p>
  </section>
</div>
<div class="detail" id="which_children/1">
    <div class="detail-header">
    <a href="#which_children/1" class="detail-link" title="Link to this function">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this function</span>
    </a>
    <span class="signature">which_children(supervisor)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L416" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
    
      <span class="note">(since 1.6.0)</span>
    
      <div class="specs">
          <pre>which_children(<a href="Supervisor.html#t:supervisor/0">Supervisor.supervisor</a>()) :: [
  {:undefined, <a href="typespecs.html#basic-types">pid</a>() | :restarting, :worker | :supervisor,
   <a href="http://www.erlang.org/doc/man/supervisor.html#type-modules">:supervisor.modules</a>()}
]</pre>
      </div>
  </div>
  <section class="docstring">
<p>Returns a list with information about all children.</p>
<p>Note that calling this function when supervising a large number
of children under low memory conditions can cause an out of memory
exception.</p>
<p>This function returns a list of tuples containing:</p>
<ul>
<li><p><code class="inline">id</code> - it is always <code class="inline">:undefined</code> for dynamic supervisors</p>
</li>
<li><p><code class="inline">child</code> - the pid of the corresponding child process or the
atom <code class="inline">:restarting</code> if the process is about to be restarted</p>
</li>
<li><p><code class="inline">type</code> - <code class="inline">:worker</code> or <code class="inline">:supervisor</code> as defined in the child
specification</p>
</li>
<li><p><code class="inline">modules</code> - as defined in the child specification</p>
</li>
</ul>
  </section>
</div>
        </section>

        <section id="callbacks" class="details-list">
          <h1 class="section-heading">
            <a class="hover-link" href="#callbacks">
              <span class="icon-link" aria-hidden="true"></span>
              <span class="sr-only">Link to this section</span>
            </a>
            Callbacks
          </h1>
<div class="detail" id="c:init/1">
    <div class="detail-header">
    <a href="#c:init/1" class="detail-link" title="Link to this callback">
      <span class="icon-link" aria-hidden="true"></span>
      <span class="sr-only">Link to this callback</span>
    </a>
    <span class="signature">init(args)</span>
      <a href="https://github.com/elixir-lang/elixir/blob/v1.7.2/lib/elixir/lib/dynamic_supervisor.ex#L138" class="view-source" rel="help" title="View Source">
       <span class="icon-code" aria-hidden="true"></span>
       <span class="sr-only">View Source</span>
     </a>
        
      <div class="specs">
          <pre>init(args :: <a href="typespecs.html#built-in-types">term</a>()) :: {:ok, <a href="#t:sup_flags/0">sup_flags</a>()} | :ignore</pre>
      </div>
  </div>
  <section class="docstring">
<p>Callback invoked to start the supervisor and during hot code upgrades.</p>
<p>Developers typically invoke <a href="DynamicSupervisor.html#init/1"><code class="inline">DynamicSupervisor.init/1</code></a> at the end of
their init callback to return the proper supervision flags.</p>
  </section>
</div>
        </section>
          <footer class="footer">
        <p>
          <span class="line">
            Built using
            <a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener">ExDoc</a> (v0.19.1),
          </span>
          <span class="line">
            designed by
            <a href="https://twitter.com/dignifiedquire" target="_blank" rel="noopener" title="@dignifiedquire">Friedel Ziegelmayer</a>.
            </span>
        </p>
      </footer>
    </div>
  </div>
</section>
</div>
  <script src="dist/app-a0c90688fa.js"></script>
  
  </body>
</html>