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