我想编写一个循环(“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