2017-10-13 399 views
0

我想創建一個for循環,我總是同時調用N函數。他們不依賴於對方,我只是想要平行運行這個循環。bash等待循環中的後臺進程

我的想法是調用我的函數作爲後臺進程,並在每次進行第N次調用後,我想等待所有後臺進程。

但不知何故,它不會等待... 我敢肯定我錯過了一些明顯的東西。

#!/bin/bash 

fun(){ 
    for i in {1..5} 
    do 
     echo $i 
     sleep 1s 
    done 
} 


N=2 
(
for k in {1..8} 
do 
    ((i=i%N)) 
    # ((i++==0)) && (echo "waiting for all background processes" && wait) PROBLEM SOLVED: 
    ((i++==0)) && echo "waiting for all background processes" && wait 

    echo "i = $i" 
    fun & 
done 

wait 
) 

編輯:它可能有一些做的一個子shell ...我不知道 EDIT2:是的,這是因爲(echo "waiting for all background processes" && wait)在子shell執行......這就是問題

回答

0

我找到了答案,這是由於在(echo "waiting for all background processes" && wait)子shell被執行死刑......

我固定的代碼