暂停/暂停整个Erlang程序

时间:2012-10-23 15:06:30

标签: erlang

是否有一种简单的方法可以暂停/暂停整个Erlang程序而无需使用OS命令(例如,用于Windows的sysinternals pssuspend)?

理想情况下,我希望在从外部程序返回时恢复该程序。

2 个答案:

答案 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
相关问题