我想同时循环执行命令,而不是一个接一个地执行

我想同时循环执行命令,而不是一个接一个地执行

我想编写一个循环(“for”),它将执行某个操作“X”次。但我不想一个接一个地按顺序执行这些操作,而是希望它们同时执行(同时并行执行)。如何实现?脚本或一行代码就可以了。

仅举例:

for i in 1 2 3 4 5; do dd if=/dev/zero of=/tmp/disk$i bs=10M count=10; done

答案1

这主要符合给出的答案Dennis(+1),并附有您的示例案例。

对于 $(seq 1 5) 中的 i;执行 \
 dd if=/dev/zero of=/tmp/disk$i bs=10M count=10 & \
完成;等待

' \' 和新行只是为了阅读的乐趣,您可以将所有这些写在一行中。


这有助于更好地理解控制序列和语法,

对于 $(seq 1 5) 中的 i;执行 \
 ( \
  回显“$i 开始...”;\
  dd if=/dev/zero of=/tmp/disk$i bs=10M count=10; \
  回显“$i 完成...”;\
 )&\
完成;等待

答案2

&在命令末尾添加一个与号 ( )dd以使每个命令在后台运行,并; wait在命令后添加done

在某些情况下,xargs --max-args=MAX-ARGS --max-procs=MAX-PROCS可以使用。

答案3

如果您安装了 GNU Parallel http://www.gnu.org/software/parallel/,您可以执行以下操作:

seq 1 5 | parallel dd if=/dev/zero of=/tmp/disk{} bs=10M count=10

观看 GNU Parallel 的介绍视频以了解更多信息: http://www.youtube.com/watch?v=OpaiGYxkSuQ

相关内容