Erlang OTP でアプリケーションの start/stop をどうするか?
Erlang OTP アプリケーションをターミナルで起動する。それをどうやって停止するか。
起動自体は
erl -noshell -noinput -pa ebin mio -s mio_app start &
のように mio_app:start => application:start(mio) という流れ。
rpc:call で application:stop を呼ぶのはどうか?
起動時に -sname で名前を付けておく。
% erl -sname mio -noshell -noinput -pa ebin mio -s mio_app start &
で停止したいときは
erl -sname dummy -mio -noshell -noinput -pa ebin mio -s mio_app stop -s init stop
のように、以下の mio_app:stop を呼び出す。
stop() -> ok = rpc:call(mio@localhost, application, stop, [mio]).
これは、ほぼうまく動くんだけど1つだけ問題点があって、application:stop でアプリケーション自体は止まるが起動プロセスが残ってしまう。
良い方法ないかな。アプリケーションは所定の方法で安全に停止しているので kill してしまうのも1つの手だよなあ。