bash for循环中的后台进程

时间:2015-12-30 18:46:03

标签: bash for-loop ubuntu-14.04 background-process

在Ubuntu 14.04上,我有一些Python脚本需要在一系列输入上运行。其中一些可以并行运行,因此我将它们作为后台进程从bash脚本启动(下面)。

for m in `seq 3 7`;
do
        python script_1.py $m
        for a in `seq 1 10 201`;
        do
                for b in `seq 0 9`;
                do
                        t=$(($a + $b))
                        python script_2.py $m $t &
                done
                wait
        done
done

所以我想分批运行Python脚本,然后等到整个批处理结束,然后转到下一批10,这样wait命令。

但是,我发现当我运行这个bash脚本时,script_2.py会在前20个输入值上运行,而不仅仅是前10个,作为后台进程。此外,在第一批20后,脚本继续根据需要以10个批次执行。是否有明显的原因发生这种情况,以及我如何阻止它这样做?

干杯!

1 个答案:

答案 0 :(得分:2)

我的代码中没有看到任何错误。我想到的唯一可能的解释是,你的script_2.py的前10次执行几乎立即退出,这样你就会有第一次并行执行20个实例的印象。我将一些调试代码添加到您的脚本中以检查这一点。类似的东西:

...
for b in {0..9} ; do
    t=$(($a + $b))
    echo "now running script_2.py with t=${t}" >> mylog.txt
    python script_2.py $m $t &
done
echo "now waiting..." >> mylog.txt
wait
...