【问题标题】:how wait for completion of multiple started background processes [duplicate]如何等待多个启动的后台进程完成[重复]
【发布时间】:2020-04-07 11:15:19
【问题描述】:

我有一个批处理脚本,它通过

在后台启动多个进程(部分是其他批处理文件)
start /b /min command1.exe  some params
start /b /min command2.bat  some params
start /b /min command3.exe  some params

在顶级批处理脚本结束时,我想等到所有进程都完成。

有没有什么方法可以在调用程序中不使用特殊方法来实现这一点?

【问题讨论】:

标签: batch-file


【解决方案1】:

您可以创建运行另一个进程的特殊批处理文件,等待它完成并创建一个特殊文件。然后使用此脚本启动所需的进程,无需等待并循环,直到创建所有文件。 灵感示例代码:

Runner.bat:

:: Run, wait and create file; %1 = file name, %2..N - process and params
set FileName=%1
shift
start /b /min /wait %* && (echo OK > %FileName%) || (echo Fail > %FileName%)

Main.bat:

call Runner.bat No1 command1.exe  some params
call Runner.bat No2 command2.bat  some params
...
:Check
... if not exist "No1", "No2", ... (
  timeout /t 5
  goto :Check
)

【讨论】:

    【解决方案2】:

    一种选择是尝试以WMIC process call create "c:\some.exe","c:\exec_dir" 启动它们并将创建的PID 分配给变量并定期检查PID 是否存在。

    你也可以试试:

    (
        start ""  /b command1
        start "" /b command2
    )|findstr "^"
    echo all processes in the brackets block have ended
    

    但如果某些命令是 bat 文件,则您必须明确使用 exit 0 而不使用 /b 开关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多