# Supervisor tomfoolery
```elixir
Mix.install([
{:kino, "~> 0.8.0"},
{:kino_vega_lite, "~> 0.1.7"}
])
```
## Supervisor setup
[](https://livebook.dev/run?url=https%3A%2F%2Fgist.github.com%2FJesseStorms%2F13954fcbdda7b04b2767bd14236afd0c)
This book is just showing and visualizing how trees look!
```elixir
supervisor = Demo
children = [
{DynamicSupervisor, strategy: :one_for_one, name: supervisor}
]
sid =
case DynamicSupervisor.start_link(name: supervisor, strategy: :one_for_one) do
{:ok, x} -> x
{_, {_, x}} -> x
end
```
<!-- livebook:{"branch_parent_index":0} -->
## Adding SubProcesses
```elixir
{:ok, agent1} = DynamicSupervisor.start_child(Demo, {Agent, fn -> %{} end})
Agent.update(agent1, &Map.put(&1, :key, "value"))
Agent.get(agent1, & &1)
# => %{key: "value"}
{:ok, agent2} = DynamicSupervisor.start_child(Demo, {Agent, fn -> %{} end})
Agent.get(agent2, & &1)
DynamicSupervisor.count_children(Demo)
Kino.Process.render_sup_tree(sid)
```
## Adding Supervisors
This adds a supervisor as a child, containing a process
```elixir
{:ok, subid} = DynamicSupervisor.start_child(Demo, DynamicSupervisor)
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
Kino.Process.render_sup_tree(sid)
```
```elixir
{:ok, subid} = DynamicSupervisor.start_child(subid, DynamicSupervisor)
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
{:ok, piid} = DynamicSupervisor.start_child(subid, DynamicSupervisor)
DynamicSupervisor.start_child(piid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(piid, {Agent, fn -> %{} end})
Kino.Process.render_sup_tree(sid)
```
## Killing a supervisor
```elixir
{:ok, tid} =
DynamicSupervisor.start_child(
piid,
{DynamicSupervisor, strategy: :one_for_one, name: Carly_Who_We_Will_Literally_Kill}
)
DynamicSupervisor.start_child(tid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(tid, {Agent, fn -> %{} end})
{:ok, subid} = DynamicSupervisor.start_child(tid, DynamicSupervisor)
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
{:ok, subid} = DynamicSupervisor.start_child(tid, DynamicSupervisor)
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
{:ok, subid} = DynamicSupervisor.start_child(subid, DynamicSupervisor)
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(subid, {Agent, fn -> %{} end})
DynamicSupervisor.start_child(tid, {Agent, fn -> %{} end})
Kino.Process.render_sup_tree(sid)
```
```elixir
# killing here, goodbye carly
DynamicSupervisor.terminate_child(piid, tid)
Kino.Process.render_sup_tree(sid)
```