Erlang OTP : application と supervisor behaviour 組み合わせにおける起動と停止
application behaviour と supervisor behaviour を組み合わせてアプリケーションを起動停止する方法を調べたのでメモ。
マニュアルは以下。
誰が何をして、どの型(callbacks)を実装しているべきなのかが把握しづらかったので mio というアプリケーションを仮定して時系列で並べてみた。
起動
- application:start(mio)
- application マスターが mio.app で定義されたモジュール mio の start2/ が呼ぶ
- mio:start/2 では supervisor mio_sup:start_link する
- mio_sup:start_link では mio_memcached, mio_boot_node などが設定により起動される
- mio:start/2 は {ok, Pid} を返す(Pid は supervisor)
- mio_memcached、mio_boot_node はどの behaviour を実装していもよい。ただの woker process でも可
- 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.
- supervisor が worker を起動する方法は child spec 。
停止
- application:stop(mio)
- Module:prep_stop, stop が呼ばれまくる
- supervisor にシャットダウンが伝えられ supervisor が child spec に従い停止作業を行う