在 Windows 上运行多个并发后台进程,然后等待所有进程终止

在 Windows 上运行多个并发后台进程,然后等待所有进程终止

有人知道是否有可以执行该操作的 cmd 脚本和/或可用于该工作的命令行工具吗?

答案1

创建以下三个批处理文件。Main.bat 启动 1.bat 和 2.bat

1.bat 和 2.bat 会写出 main.bat 检查的临时文件。当 1.bat 和 2.bat 运行时,main.bat 会报告处理仍在进行中。当您在 1.bat 或 2.bat 的打开窗口中按下 Enter 键时,临时文件将被删除,程序将退出。这模拟了该 .bat 文件的处理停止。如果您对 1 和 2.bat 都执行此操作,main.bat 会向您报告这些进程的处理已完成。您可以让 1.bat 和 2.bat 执行任何您想做的事情,只要您在完成后清除临时文件即可。此时 main.bat 也可以执行您想让它执行的任何操作。

1.bat

echo %time% > 1.tmp
pause
del 1.tmp
exit 

2.bat

echo %time% > 2.tmp
pause
del 2.tmp
exit

主程序

@echo off
start "1" 1.bat
start "2" 2.bat
    @ping -n 1 127.0.0.1 > nul
:loop
@echo Processing......
if not exist *.tmp goto :next
    @ping -n 5 127.0.0.1 > nul
goto loop
:next
@echo Done Processing!

答案2

非常简单,只要进程不需要标准输入或输出即可。从命令行或批处理文件中:

process1 | process2 | process3 | process4

这将同时运行所有四个进程,直到它们全部退出后才会返回。(可能的例外:如果某个进程明确关闭了标准输出,则可能会将其视为已退出。但这种情况并不常见,很少有进程会这样做。)

我不确定通过这种方式可以同时启动多少个进程。我试过最多十个。

答案3

唯一的方法是启动单独的批处理文件(请参阅start /?),运行单个任务并在完成后写入文本文件。然后,定期检查文本文件是否已生成。

答案4

或者你可以使用这个: http://www.out-web.net/?p=167

我做到了,它起作用了,然而有时会发生已完成进程的 PID 被另一个刚启动的 Windows 进程立即重新使用的情况,这会使对进程结束的检测变得危险/错误。

相关内容