bash - bash for 循环中的后台进程

标签 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

因此,我想以 10 个批处理运行 Python 脚本,然后等到整个批处理完成后再继续执行下一个 10 个批处理,因此需要 wait 命令。

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

干杯!

最佳答案

我没有发现您的代码有任何问题。我想到的唯一可能的解释是 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
...

关于bash - bash for 循环中的后台进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34535332/

相关文章:

linux - 在 Bash 中使用基于 Perl 的重命名命令和查找

java - 每百万次迭代打印一次消息

python - 从 windows 浏览器访问 ubuntu 虚拟机主机

linux - 检查多路径 TCP 连接中的子流

linux - 使用awk根据条件比较两个文件

php - xterm 中的换行问题

java - 字符串中的数字

excel - 如何从第 3 行开始选择整列 - vba

java - Jenkins 似乎无法构建 java Artifact 。更多信息包含在 github gist [Pastebin] 中

bash - 将当前目录保存到 bash 历史记录