Я хочу выполнять команды в цикле одновременно, а не по порядку
Я хотел бы написать цикл ('for'), который будет выполнять какое-то действие 'X' несколько раз. Но вместо того, чтобы выполнять действия последовательно, одно за другим, я бы хотел, чтобы они выполнялись одновременно (в parellel одновременно). Как этого достичь? Сценарий или один лайнер в порядке.
Пример ТОЛЬКО:
for i in 1 2 3 4 5; do dd if=/dev/zero of=/tmp/disk$i bs=10M count=10; done
3 ответа
Это в основном ответ Dennis
дал (+1 там), с вашим примером.
для я в $(след. 1 5); делать \ dd if=/dev/zero of=/tmp/disk$i bs=10M count=10 & \ сделанный; Подождите
'\
"И новые строки просто для удовольствия от чтения, вы можете написать все это в одну строку.
Это дает лучшее понимание последовательности управления и синтаксиса,
для я в $(след. 1 5); делать \ ( \ эхо "$ я начинаю..."; \ дд если =/dev/zero of=/tmp/disk$i bs=10M count=10; \ echo "$i done ..."; \) & \ сделанный; Подождите
Добавить амперсанд (&
) в конце dd
Команда, чтобы каждый из них работал в фоновом режиме и добавить ; wait
после done
,
В некоторых случаях, xargs --max-args=MAX-ARGS --max-procs=MAX-PROCS
может быть использован.
Если у вас установлен 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