是否有一种简单的方法可以暂停/暂停整个Erlang程序而无需使用OS命令(例如,用于Windows的sysinternals pssuspend)?
理想情况下,我希望在从外部程序返回时恢复该程序。
答案 0 :(得分:0)
正如W55tKQbuRu28Q4xv所说,你可以“暂停”过程。
要执行该操作并且不会丢失暂停时发送到您的进程的所有邮件,请执行选择性接收。假设您的进程是gen_server,它可能如下所示:
handle_info(pause, State) ->
receive
unpause ->
{noreply, State}
end;
请注意,在您的流程的接收队列中,所有消息都将存在。因此,如果您以依赖于系统时钟值的方式处理消息,则需要将时间采样移至发送方进程。
答案 1 :(得分:0)
我认为对我的问题的简短回答是'不'。
您可以向所有进程发送暂停消息。然而,很难知道进程将以什么顺序停止,并且如果使用大量进程则可能存在相对大的时间延迟。最后我确实使用pssuspend来做到这一点:
在Erlang中:
runmyscript() ->
receive
updatemodel->
os:cmd("start myscript.bat"),
...
end.
在myscript.bat
中pssuspend werl.exe
mycommands
...
pssuspend -r werl.exe
exit