2017-10-13 349 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被执行死刑......

我固定的代码