捕获分离的命令的输出使执行顺序

时间:2019-01-17 08:44:03

标签: bash

我正在尝试通过分离命令来并行运行命令:

  

睡眠2秒&

#!/bin/bash
for ((i=1;i<=3;i++)); do
    sleep 2s &
    pids[${i}]=$!
done

for pid in ${pids[*]}; do
    wait $pid
done

哪个会生成3倍的命令'sleep 2s'并等待命令完成

这将按预期执行(2秒):

  

pi @ raspberrypi:〜/ scripts $ time ./test.sh

     

真实0m 2.029s   用户0m0.022s   sys 0m0.052s

当我尝试捕获流程的输出时,执行从并行更改为顺序。现在执行时间为6秒(3x 2秒)

  

输出[$ {i}] = $(睡眠2秒&

#!/bin/bash
for ((i=1;i<=3;i++)); do
    output[${i}]=$(sleep 2s &)
    pids[${i}]=$!
done

for pid in ${pids[*]}; do
    wait $pid
done
  

pi @ raspberrypi:〜/ scripts $ time ./test.sh

     

真实0m 6.030s   用户0m0.006s   sys 0m0.015s

关于在并行运行命令时如何捕获输出的任何想法? 谢谢!

0 个答案:

没有答案