与えられた関数:
%% @doc Retrieves client's state.
-spec(state(pid()) -> atom()).
state(Pid) when is_pid(Pid) ->
case process_info(Pid) of
undefined ->
undefined;
_Else ->
Pid ! {state, self()},
receive
{state, State} ->
State
after
1000 ->
undefined
end
end.
死んだ pid と生きているクライアントに対して期待どおりに動作します。
> client:state(A).
undefined
> client:state(Pid).
online
しかし、何らかの理由で、プロセス Pid が 1 秒間ステータスを応答しない場合、Pid が返されます。
> client:state(self()).
<0.172.0>
私はそこに「未定義」のアトムを期待しています。このコードを修正するにはどうすればよいですか?