Как запустить несколько «последовательных» процессов под управлением, учитывая доступные процессоры?

Предположим, у вас есть двоичный файл, который должен быть запущен в файлах maaaaaaaaany (предположим, что файлы пронумерованы от 1 до N). Каждый файл должен обрабатываться путем обращения к этому двоичному файлу (скажем … что-то вроде md5sum). Каждый прогон сохранит результат в отдельном файле. Итак … если у нас 1000 файлов, и у нас только 4 процессора, мы не хотим делать что-то вроде (если вообще возможно, на самом деле):

i=0; while [ $i -lt 1000 ]; do md5sum a_file_$i > result_$i & i=$(( $i + 1 )); done 

Потому что (даже если bash не будет жаловаться), мы закончим запуск 1000 процессов, которые заставят компьютер перейти в режим сканирования.

Есть ли доступная команда, которую я мог бы использовать, когда я могу сказать указанной команде, что она должна выполняться как n процессов за один раз (запуск n процессов, мониторинг, когда процесс завершается, а затем начинается другое, так что количество запущенных процессов всегда п)?

One Solution collect form web for “Как запустить несколько «последовательных» процессов под управлением, учитывая доступные процессоры?”

GNU parallel – это инструмент, который вы ищете. Автор, Оле Танге , регулярно здесь и написал несколько хороших ответов на вопросы об этом

Версия xargs от xargs от findutils также имеет несколько вариантов параллельного выполнения нескольких заданий. Это, вероятно, проще в использовании для простых заданий, таких как ваши, но нигде рядом с такими гибкими и не способными, как parallel .

Например:

 find . -maxdepth 1 -type f -name 'a_file_*' -print0 | xargs -0r -L 1 -P 4 sh -c '/usr/bin/md5sum "$1" > "$1.md5sum"' {} 

Это будет работать до 4 md5sum заданий параллельно ( -P 4 ). Я также использовал параметр -L 1 для ограничения каждого задания на обработку одного имени файла за раз – без этого (в противном случае он будет запускать только одно задание с 1000 именами файлов)

  • Объединение нескольких таблиц с разделителями табуляции на основе общих столбцов
  • Как добавить пользователей из данных в текстовый файл
  • Скрипт для организации рабочего стола в папки / каталоги с помощью расширения
  • Как я могу найти учетную запись пользователя в различных конфигурационных файлах, связанных с sudo?
  • Sudo в качестве другого пользователя, чтобы сохранить свой домашний каталог в txt-файле
  • Преобразование if в случае
  • Написание сценария, который показывает, сколько строк имеет «X» и «Y» в нем?
  • Измените файл без создания другого файла
  • SCO Unix запускает интерактивный скрипт при отправке задания на печать
  • Создание диаграмм (в PNG или JPG) с консоли?
  • Добавление значений столбца с одинаковым идентификатором данных?
  • Linux и Unix - лучшая ОС в мире.