Я хотел бы записать, что цикл ('для') этого сделает некоторое действие 'X' количество раз. Но вместо того, чтобы выполнить действия последовательно, один за другим, я хотел бы, чтобы они выполнились одновременно (в параллели одновременно). Как это может быть достигнуто? Сценарий или один лайнер прекрасны.
пример ТОЛЬКО:
for i in 1 2 3 4 5; do dd if=/dev/zero of=/tmp/disk$i bs=10M count=10; done
Это главным образом приезжает ответ Dennis
дал (+1 там), с Вашим демонстрационным случаем.
for i in $(seq 1 5); do \ dd if=/dev/zero of=/tmp/disk$i bs=10M count=10 & \ done; wait
'\
'и новые строки только для удовольствия чтения, можно записать все это в одной строке.
Это дает лучшее понимание управляющей последовательности и синтаксиса,
for i in $(seq 1 5); do \ ( \ echo "$i starting ..."; \ dd if=/dev/zero of=/tmp/disk$i bs=10M count=10; \ echo "$i done ..."; \ ) & \ done; wait
Добавьте амперсанд (&
) в конце dd
команда, чтобы сделать каждое выполнение в фоновом режиме и добавить ; wait
после done
.
В некоторых случаях, xargs --max-args=MAX-ARGS --max-procs=MAX-PROCS
может использоваться.
Если у Вас есть Параллель GNU http://, www.gnu.org/software/parallel/ установил Вас, может сделать это:
seq 1 5 | parallel dd if=/dev/zero of=/tmp/disk{} bs=10M count=10
Посмотрите вводное видео для Параллели GNU для узнавания больше: http://www.youtube.com/watch?v=OpaiGYxkSuQ