Erlang OTP : application と supervisor behaviour 組み合わせにおける起動と停止

application behaviour と supervisor behaviour を組み合わせてアプリケーションを起動停止する方法を調べたのでメモ。
マニュアルは以下。

誰が何をして、どの型(callbacks)を実装しているべきなのかが把握しづらかったので mio というアプリケーションを仮定して時系列で並べてみた。

起動

  1. application:start(mio)
  2. application マスターが mio.app で定義されたモジュール mio の start2/ が呼ぶ
  3. mio:start/2 では supervisor mio_sup:start_link する
  4. mio_sup:start_link では mio_memcached, mio_boot_node などが設定により起動される
  5. mio:start/2 は {ok, Pid} を返す(Pid は supervisor)
  6. mio_memcached、mio_boot_node はどの behaviour を実装していもよい。ただの woker process でも可
    1. The start function must create and link to the child process, and should return {ok,Child} or {ok,Child,Info} where Child is the pid of the child process and Info an arbitrary term which is ignored by the supervisor.
  7. supervisor が worker を起動する方法は child spec 。

停止

  1. application:stop(mio)
  2. Module:prep_stop, stop が呼ばれまくる
  3. supervisor にシャットダウンが伝えられ supervisor が child spec に従い停止作業を行う