0

有没有一种简单的方法来挂起/暂停整个 Erlang 程序而无需使用操作系统命令(例如 Windows 的 sysinternals pssuspend)?

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

4

2 回答 2

0

正如 W55tKQbuRu28Q4xv 所说,您可以“暂停”进程。

要执行此操作并且不会丢失在暂停时发送到您的进程的所有消息,请执行选择性接收。假设您的进程是 gen_server 它可能如下所示:

handle_info(pause, State) ->
    receive 
        unpause ->
            {noreply, State}
    end;

请注意,所有消息都将存在,在您的进程的接收队列中。因此,如果您以依赖于系统时钟值的方式处理消息,则需要将时间采样移至发送方进程。

于 2012-10-24T12:37:10.977 回答
0

我认为我的问题的简短回答是“不”。

您可以向所有进程发送暂停消息。然而,很难知道进程将以什么顺序停止,如果使用大量进程,可能会有相对较大的时间延迟。最后我确实使用 pssuspend 来做到这一点:

在二郎中:

runmyscript() ->
  receive
       updatemodel->
           os:cmd("start myscript.bat"),
...
end.

在 myscript.bat 中

pssuspend werl.exe
mycommands
...
pssuspend -r werl.exe
exit
于 2012-10-25T20:30:06.227 回答