给定一个函数:
%% @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>
我期待那里有“未定义”的原子。如何修复此代码?