私はerlang:monitor/2を使用してgen_serverを監視しようとしています。残念なことに、これを試すたびにErlangシェルは無限ループに入ります。gen_serverの監視
これをテストするために書いたテストプログラムはここにあります。
-module(testmon).
-compile(export_all).
start() ->
{ok,Proc} = gen_server:start(calc,[],[]),
erlang:monitor(process,Proc),
receive
{'DOWN', Ref, process, Pid, normal} ->
io:format("~p said that ~p died by natural causes~n",[Ref,Pid]);
{'DOWN', Ref, process, Pid, Reason} ->
io:format("~p said that ~p died by unnatural causes~n~p",[Ref,Pid,Reason])
end.
私はこの卵(楽しい() - > OK終了)のようなものを監視するために上記のコードを使用してのerlangに(ライン6と7を変更することによって):監視(産卵(楽しい() - > [OK]を終了し))上記のコードは意図したとおりに動作します。
私が間違っていることを誰かに教えてもらえますか?スーパーバイザを介してgen_serverプロセスを監視することのみが可能ですか?
はgen_serverが、何らかの理由で死ぬまでを受けるで、(アーランにループが全く存在しない)それは無限ループではありません、あなたのシェルだけでブロックを
を、あなたのコード内でのコピー&ペーストのエラーを行っているように思えます。最後に '1000 - > timeout'句を追加すると、デバッグに役立つかもしれません。 – Lukas
開始機能の1行目と2行目?? 1つ目は純粋な構文エラーです。 – user425720
修正済み:あなたが間違って貼り付けたときにコードが乱雑になってしまっています。これは私が元来意図していたものです。ありがとうございました –