When Processes Die

Learn how to monitor a process and link two processes.

When a process dies

Who gets told when a process dies? By default, no one. Obviously, the VM knows and can report it to the console, but our code will be oblivious unless we explicitly tell Elixir we want to get involved. Here’s the default case: we spawn a function that uses the Erlang timer library to sleep for 500 ms. It then exits with a status of :boom. The code that spawns it sits in a receive. If it receives a message, it reports that fact. Otherwise, after one second, it lets us know that nothing happened.

Run the elixir -r link1.exs command to execute the code below:

defmodule Link1 do
  import :timer, only: [ sleep: 1 ]

  def sad_function do
    sleep 500
    exit(:boom)
  end

  def run do
    spawn(Link1, :sad_function, [])
    receive do
      msg ->
        IO.puts "MESSAGE RECEIVED: #{inspect msg}"
    after 1000 ->
        IO.puts "Nothing happened as far as I am concerned"
    end
  end
end

Link1.run
When a process dies

Think about how we would’ve written this ...