如何并行运行多个 pv 命令?

Jos*_*osh 3 shell job-control pv parallelism

我想pv在每个管道上运行一系列命令管道。下面是一个例子:

for p in 1 2 3
do
  cat /dev/zero | pv -N $p | dd of=/dev/null &
done
Run Code Online (Sandbox Code Playgroud)

管道中的实际命令无关紧要(cat/dd只是一个例子)...

目标是 4 个同时运行的管道,每个管道都有自己的pv输出。但是,当我尝试将这样的命令置于后台时,会pv停止,我得到的只是 4 个已停止的作业。我试过{...|pv|...}&bash -c "...|pv|..." &结果都一样。

如何同时运行多个pv命令管道?

Jos*_*osh 7

发现我可以使用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] [                                                                                         <=>                                                                 ]
Run Code Online (Sandbox Code Playgroud)

发送数组的输出以迭代到标准输入xargs;要同时运行所有命令,请使用-P 0