それぞれにpv
を指定して一連のコマンドパイプラインを実行したいと思います。次に例を示します。
for p in 1 2 3
do
cat /dev/zero | pv -N $p | dd of=/dev/null &
done
パイプ内の実際のコマンドは重要ではありません(cat
/dd
は単なる例です)...
目標は、それぞれが独自のpv
出力を持つ4つの同時に実行されるパイプラインです。ただし、このようなコマンドをバックグラウンドで実行しようとすると、pv
が停止し、停止したジョブは4つだけになります。 {...|pv|...}&
、bash -c "...|pv|..." &
で試しましたが、すべて同じ結果になりました。
複数のpv
コマンドパイプラインを同時に実行するにはどうすればよいですか?
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
のstdinに繰り返し処理します。すべてのコマンドを同時に実行するには、-P 0
を使用します