给定一个功能:
%% @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.
它对于死亡的pids和活着的客户端的预期效果如下:
> client:state(A).
undefined
> client:state(Pid).
online
但是由于某些原因,如果进程Pid在1秒内没有回复他的状态,则返回Pid:
> client:state(self()).
<0.172.0>
我期待那里的'未定义'原子。 我该如何修复此代码?
答案 0 :(得分:4)
这是因为您收到了您发送的邮件。您的函数正在shell进程上运行,并向自身发送{state, self()}
消息。发送消息后,它会立即收到消息,并且函数以State
结束,这是您发送的self()
个pid。
我希望我不会太困惑。