在Erlang被发送到无限远睡眠状态后,是否可以在Erlang中外部唤醒进程?
我想从一个不同的进程中唤醒它,它确实保存了进程的进程ID。
我在想要睡觉的过程中使用了这个:
timer:sleep(infinity)
如果无法从外部唤醒它,我还有哪些其他选择?
答案 0 :(得分:8)
不是使用timer:sleep/1
,而是将进程放入receive
,以便等待消息。当其他进程希望它继续时,它可以简单地向它发送消息。假设消息与receive
正在查找的内容相匹配,则第一个进程将退出receive
并继续。
答案 1 :(得分:1)
从这个函数的源代码:
-spec sleep(Time) -> 'ok' when
Time :: timeout().
sleep(T) ->
receive
after T -> ok
end.
你可以发现sleep
让进程等待,什么都不做。
如果你想要唤醒这个过程,你需要向休眠过程发送消息并执行receive
。