bash 循环等待后台进程
bash wait for background processes in loop
我想创建一个 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 中执行的......这就是问题所在
我找到了答案,这是因为 (echo "waiting for all background processes" && wait)
是在子 shell 中执行的...
我修改了代码
我想创建一个 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 中执行的......这就是问题所在
我找到了答案,这是因为 (echo "waiting for all background processes" && wait)
是在子 shell 中执行的...
我修改了代码