Я хочу выполнить команды в цикле одновременно, не один за другим

Я хотел бы записать, что цикл ('для') этого сделает некоторое действие 'X' количество раз. Но вместо того, чтобы выполнить действия последовательно, один за другим, я хотел бы, чтобы они выполнились одновременно (в параллели одновременно). Как это может быть достигнуто? Сценарий или один лайнер прекрасны.

пример ТОЛЬКО:

for i in 1 2 3 4 5; do dd if=/dev/zero of=/tmp/disk$i bs=10M count=10; done
5
задан 17.05.2010, 11:25

3 ответа

Это главным образом приезжает ответ 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
4
ответ дан 07.12.2019, 17:29

Добавьте амперсанд (&) в конце dd команда, чтобы сделать каждое выполнение в фоновом режиме и добавить ; wait после done.

В некоторых случаях, xargs --max-args=MAX-ARGS --max-procs=MAX-PROCS может использоваться.

2
ответ дан 07.12.2019, 17:29

Если у Вас есть Параллель 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

1
ответ дан 07.12.2019, 17:29

Теги

Похожие вопросы