2009-01-09 92 views
4

餵我與使用的rcS腳本啓動模擬器的工作,這是我的腳本執行多項任務

cd /tests 
./test1 & 
./test2 & 
./test3 & 
./test4 
exit 

我想要的是運行所有測試在同一時間,並且僅當所有先前的測試完成時才執行退出命令。不僅當測試4完成時,這是可能的嗎? 謝謝。沿

cd /tests 
./test1 & 
./test2 & 
./test3 & 
./test4 & 
wait 
exit 

+0

你可能要替換 「./exit」 只用 「退出」,退出shell腳本。如果您實際上在該目錄中運行一個名爲'exit'的可執行文件或腳本,我建議將其重命名爲不太令人混淆的內容。 – 2009-01-10 21:48:50

回答

8

您可以使用等待:

./test1 & 
./test2 & 
./test3 & 
./test4 & 
wait 

從bash的手冊頁:

等待[n ...] 等待e ach指定進程並返回其終止狀態 。每個n可以是一個 進程ID或工作規範;如果給出了作業規範 ,則等待作業管線的 中的所有進程。 如果沒有給出n,則 等待所有當前活動的子進程,並且 返回狀態爲零。如果n 指定了一個不存在的進程或 作業,則返回狀態爲127. 否則,返回狀態爲最後一個 進程或作業等待的 退出狀態。

+0

注意,如果你試圖運行一個php腳本,配置php會阻止進程在後臺運行輸出任何東西。我發現很難讓Google知道如何打開默認行爲。我最終發現了這個問題:http://serverfault.com/q/564720/210994 – ThorSummoner 2015-01-15 21:39:14

4

東西(我假設的bash shell)

+0

打我吧:) – 2009-01-09 23:58:20

5

xargs可以支持並行

所以就像這樣:

seq 4|xargs -i -n 1 -P 4 ./test{} 
+0

哪個標誌是激活並行執行的標誌?並且所有的子處理都幾乎在同一時間開始? – ThorSummoner 2015-01-15 20:55:55