2013-02-07 80 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

我真的需要並行運行這些進程。如果可能的話,我也想避免解析。 –

相關問題