2013-02-07 50 views
2

我需要从批处理作业中启动2个后台进程,然后等待它们。 Unix外壳模拟是:Windows批处理:在后台运行进程并等待它

myprocess1 -flags1 & 
pid1=$! 

myprocess2 -flags2 & 
pid2=$! 

wait ${pid1} 
wait ${pid2} 

任何想法?

+2

Echo > waiting.tmp Start cmd /c wrapper.bat myprocess1 -flags1 start /wait myprocess2 -flags2 :loop if exist waiting.tmp goto :loop 

内容有安装'bash' for Windows或类似的东西(我敢肯定有'zsh'本地人,非cygwin的端口的想法, 至少)。我很想为许多批处理文件问题推荐相同的内容,但对于这个问题,这可能是一个很好的答案。 –

+0

@AntonKovalenko谢谢。我正在考虑这个问题。 –

回答

5

你可以使用开始包装来解决它。

包装器使用start /wait启动一个进程,并在该过程完成后删除信号文件。

您首先通过包装器开始的第一个过程,第二个过程可以从start /wait开始。
然后你只需要等待文件。 wrapper.bat

start /wait %* 
del waiting.tmp 
+2

+1 - 您可以反转逻辑,并以“waiting.tmp”开头,并通过删除文件完成信号完成。主脚本中的少一行代码:-) – dbenham

+0

感谢Dave,我将它改为了您的巧妙建议 – jeb

+0

如果使用我的建议,那么wrapper.bat必须删除.tmp文件,我认为.tmp文件应该重命名到“waiting.tmp”。另外,我只注意到包装器不应该使用'/ wait'选项。 – dbenham

1

使用START命令:

START /WAIT myprocess1 -flags1 

唯一的问题是,据我所知,你不能让程序并行运行,等待他们两人 - 他们必须按顺序运行。

您可能可以通过启动两个进程而不是START /WAIT来执行并发,然后周期性地分析TASKLIST命令的输出以查看它们是否仍在运行。这将变得更加复杂,当然这是一个忙碌的等待,但理论上会允许进程同时运行。

+0

我真的需要并行运行这些进程。如果可能的话,我也想避免解析。 –

相关问题