Supervisors

Contents
Trees of processes
Restart strategies
Child specs
Start a tree

Trees of processes

A supervisor watches worker processes and restarts them when they crash, forming a tree with one boss and many leaves. Each crash stays local: the broken leaf restarts while siblings keep running. The children list declares the leaves as module and argument pairs.

children = [{Counter, 0}]

The pair says to start the Counter server with zero as its initial argument.

Restart strategies

The strategy option decides how far a restart spreads after one child fails. The one_for_one choice restarts only the crashed child and fits independent workers. The one_for_all choice restarts every child for tightly linked state, while rest_for_one restarts the crashed child plus everything started after it.

Supervisor.start_link(children, strategy: :one_for_one)

Child specs

Behind the scenes each pair expands into a child spec map with an id and a start instruction. The id names the child while start holds the module, function, and arguments to launch it. Write the map form when a child needs custom restart or shutdown settings.

child = %{id: Counter, start: {Counter, :start_link, [0]}}

Start a tree

Starting the supervisor with the children list and a strategy boots the whole tree at once. The call returns an ok tuple with the supervisor pid when every child launches cleanly. Checking the pid confirms that the tree is alive.

children = [{Counter, 0}] {:ok, sup} = Supervisor.start_link(children, strategy: :one_for_one) IO.inspect(is_pid(sup))

true

Next: Tasks and Agents

Article author: Arthur Isaev

Related articles
Elixir
Elixir course: zero to hero in 50 lessons
What is Elixir and where it runs
Install Elixir
iex: the interactive shell
Your first script
Variables
Numbers
Strings
Atoms
Truthiness: only false and nil
Conditions
Recursion replaces loops
Lists
Tuples
Maps
Keyword lists
Functions
Defaults and clauses
Pattern matching
case
with chains
Modules in Elixir
import, alias, require, use in Elixir
Structs in Elixir
Protocols in Elixir
Behaviours in Elixir
The pipe operator in Elixir
Enum in Elixir
Stream in Elixir
Comprehensions in Elixir
Advanced strings in Elixir
Sigils
Binaries and charlists
Exceptions
ok and error tuples
Files and IO
Processes
GenServer
Supervisors
Tasks and Agents
OTP applications
Mix projects
Dependencies
Testing with ExUnit
Doctests
Debugging
Configs
Releases
Capstone: todo CLI
Capstone: HTTP server
Hero roadmap: the whole course on one page
Install Elixir on Windows 11
Install Elixir on Ubuntu
Install Elixir on Rocky Linux
Install Elixir on macOS
Install Elixir on FreeBSD
Elixir in Docker

Search this site

Channel @aofeed Chat @aofeedchat

Contacts and cooperation:
I recommend our hosting beget.com
Write to info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: