This and the other “Deck” posts are a repurposing of flashcard study decks to Q&A blog posts. Google was not showing love to this content as a set of flashcards and I didn’t want to delete them entirely, I hope you find it useful.
What is the function of an Elixir Supervisor?
It is a process that monitors other processes and restarts them based on a specified supervision strategy.
How are supervisors related to the Elixir axiom "let it crash"?
Supervisors will spin up new processes in the event of a failure. If a process errors/fails a new one will be started without the developer having to step in and restart anything. Aka they can “let it crash”.
How are processes under supervision related to the Supervising process?
They are considered child processes of the supervisor.
How do you start a supervisor that monitors child processes?
You pass a list of child processes to the supervisor. Each child process is a Map
that contains keys of id
and start
. The id
is the process and start
is a Tuple
containing information on how to run the process. Example below:
children = [ %{ id: ChildProcess, start: {ChildProcess, :start_link, [[:initial_state]]} } ]
{:ok, pid} = Supervisor.start_link(children, strategy: :one_for_one)
What supervision strategy should be used if you want only the specific child process that terminates to be restarted?
one_for_one
What supervision strategy should be used if you want all child processes to be restarted if any of them terminate?
one_for_all
What supervision strategy should be used if you want all processes started after the terminated one to also be terminated and restarted?
rest_for_one
What is a supervision tree?
It is a hierarchy of process supervisors. This means that a process that is under supervision can also have its own child processes that it supervises.