gpt4 book ai didi

batch-file - 等待多个应用程序从批处理文件异步运行完成

转载 作者:行者123 更新时间:2023-12-03 21:30:17 26 4
gpt4 key购买 nike

有一个简单的 Windows 批处理文件可以运行多个应用程序实例:

start app.exe param1
start app.exe param2

有没有办法同时异步运行它们(上面这样做)并等待它们都完成以执行其他操作 - 像 C#
Task.WhenAll(tasksList.ToArray());
/* Process tasksList.Result */

?/wait 开关在这里无济于事,可能会轮询特定实例是否仍在运行。

最佳答案

我想这个问题与 Waiting for parallel batch scripts 略有不同因为此应用程序正在等待 .exe 进程完成而不是批处理脚本。但解决方案几乎相同。

您必须在主批处理脚本中实例化某种形式的轮询。您可以通过重定向有效地创建锁定文件。锁定文件保持锁定状态,直到进程终止。您的批处理脚本进行轮询,检查它是否可以打开所有锁定文件。一旦成功,它就知道所有进程都已结束。

以下解决方案的唯一显着区别是 START直接启动 .exe 而不是通过 CMD /C 启动批处理.我还了解到(call )是一种非常快速的方法来有效地执行总是成功的空操作。所以我换成了(call )代替 rem

@echo off
setlocal
set "lock=%temp%\wait%random%.lock"

:: Launch processes asynchronously, with stream 9 redirected to a lock file.
:: The lock file will remain locked until the script ends.
start "" 9>"%lock%1" notepad.exe
start "" 9>"%lock%2" notepad.exe

:Wait for both processes to finish (wait until lock files are no longer locked)
1>nul 2>nul ping /n 2 ::1
for %%N in (1 2) do (
(call ) 9>"%lock%%%N" || goto :Wait
) 2>nul

::delete the lock files
del "%lock%*"

:: Finish up
echo Done - ready to continue processing

Parallel execution of shell processes用于调节最大并行进程数的锁技术的非常复杂的应用程序,能够通过 PSEXEC 将进程定向到特定的 CPU 或机器.该答案还更全面地解释了锁定文件技术的工作原理。

编辑

可以修改等待循环,以便在添加更多进程时不需要更改它:
:Wait for all processes to finish (wait until lock files are no longer locked)
1>nul 2>nul ping /n 2 ::1
for %%F in ("%lock%*") do (
(call ) 9>"%%F" || goto :Wait
) 2>nul

关于batch-file - 等待多个应用程序从批处理文件异步运行完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18758502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com