当尝试将不匹配的消息发送到erlang shell中的生成进程时,我原本期望邮件应保留在邮箱中,但看起来邮箱是空的,为什么?
Erlang R15B02 (erts-5.9.2) [smp:2:2] [async-threads:0]
Eshell V5.9.2 (abort with ^G)
1> Pid = spawn(fun()->receive stop->stop end end).
<0.33.0>
2> Pid ! msg.
msg
3> erlang:process_info(Pid, messages).
{messages,[]} %% where is the msg?
答案 0 :(得分:4)
当邮件无法与接收模式匹配时,它会从邮箱移动到保存队列,请参阅http://ndpar.blogspot.se/2010/11/erlang-explained-selective-receive.html以获取有关所发生情况的详细说明。
messages
process_info/2
参数只显示邮箱内容,AFAIK无法检查保存队列的内容。
答案 1 :(得分:0)
该消息当然在那里,将在后续接收中进行检查。在我看来,使用erlang:process_info(Pid, messages)
无法看到它的事实很奇怪。
答案 2 :(得分:0)
(ppb2_bs6@esekilvxen245)1> self() ! a.
a
(ppb2_bs6@esekilvxen245)2> erlang:process_info(self(), messages).
{messages,[a]}