あなたの handle_call 関数には 2 番目があります。引数 From :: {pid(), tag()}
リクエストを処理する前に handle_call で monitor(process, FromPid) を呼び出すことができるので、erl_call ノードが切断されたときに DOWN メッセージを受け取ります。ただし、別のプロセスを生成するか、gen_server:reply() で遅延応答を使用しない限り、現在の handle_call が完了する前に DOWN メッセージを処理できないことに注意してください。
例: handle_call 句は次のとおりです。
handle_call(test, {From, _}=X, State) ->
erlang:monitor(process, From),
spawn(fun() ->
timer:sleep(10000),
io:format("### DONE~n", []),
gen_server:reply(X, ok) end),
{noreply, State}.
次に DOWN をキャッチします。
handle_info(Info, State) ->
io:format("### Process died ~p~n", [Info]),
{noreply, State}.
次に、コマンド ラインから erl_call を生成します: erl_call -c 123 -n test -a 'gen_server call [a, test, infinity]'
Ctrl-Cを押します
10 秒後に gen_server コンソールに次のように表示されます。
### DONE
### Process died {'DOWN',#Ref<0.0.0.41>,process,<0.44.0>,normal}