bash在循环中等待后台进程

时间:2017-10-13 08:47:52

标签: bash for-loop wait background-process

我想创建一个for循环,我总是同时调用N个函数。它们不依赖于彼此,我只是想并行地运行这个循环。

我的想法是将我的函数作为后台进程调用,在每次第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
)
编辑:它可能与子壳有关......我不确定 EDIT2:是的,这是因为(echo "waiting for all background processes" && wait)是在子shell中执行的......这就是问题

1 个答案:

答案 0 :(得分:0)

我找到了答案,这是由于(echo "waiting for all background processes" && wait)在子shell中执行...

我修复了代码