複数のpvコマンドを並列に実行するには?

複数のpvコマンドを並列に実行するには?

pv各パイプラインで一連のコマンドパイプラインを実行したいと思います。例は次のとおりです。

for p in 1 2 3
do
  cat /dev/zero | pv -N $p | dd of=/dev/null &
done

パイプラインの実際のコマンドは重要ではありません(cat/ddは単なる例です)...

目標は同時に実行される4つのパイプラインで、それぞれ独自のpv出力があります。ただし、バックグラウンドでこのようなコマンドを入力しようとすると、pvコマンドは停止し、4つの停止したジョブのみが表示されます。私はそれを試しましたが、{...|pv|...}&同じbash -c "...|pv|..." &結果を得ました。

pv複数のコマンドパイプラインを同時に実行するには?

ベストアンサー1

xargs次のオプションを使用して-Pこれを実行できることがわかりました。

josh@subdivisions:/# seq 1 10 | xargs -P 4 -I {} bash -c "dd if=/dev/zero bs=1024 count=10000000 | pv -c -N {} | dd of=/dev/null"
        3: 7.35GiB 0:00:29 [ 280MiB/s] [                                                                                         <=>                                                                 ]
        1: 7.88GiB 0:00:29 [ 312MiB/s] [                                                                                         <=>                                                                 ]
        4: 7.83GiB 0:00:29 [ 258MiB/s] [                                                                                         <=>                                                                 ]
        2: 6.55GiB 0:00:29 [ 238MiB/s] [                                                                                         <=>                                                                 ]

繰り返す配列の出力を次に送信しますxargs。すべてのコマンドを同時に実行するには、次のようにします。-P 0

おすすめ記事