OSコマンド(Windowsの場合はsysinternals pssuspendなど)を使用せずにErlangプログラム全体を一時停止/一時停止する簡単な方法はありますか?
理想的には、外部プログラムから戻ったときにプログラムを再開したいと思います。
OSコマンド(Windowsの場合はsysinternals pssuspendなど)を使用せずにErlangプログラム全体を一時停止/一時停止する簡単な方法はありますか?
理想的には、外部プログラムから戻ったときにプログラムを再開したいと思います。
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