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

Предположим, у вас есть двоичный файл, который должен быть запущен в файлах 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 именами файлов)

  • Уменьшить длину определенного столбца в текстовом файле с разделителями
  • Извлечение символов после определенного текста
  • Как обнаружить зависание настольного приложения
  • Автоматизация отчета Excel
  • Как проверить, нет ли у группы пользователей и удалить их?
  • Безопасное выход из цикла в bash
  • Самый универсальный язык для Linux?
  • Запуск программы (команды) на терминале после экрана входа в Ubuntu 14.04
  • Как создать сценарий оболочки для обработки команд типа ls -l / somedir
  • Слияние двух файлов с помощью скриптов
  • как редактировать двуязычный текст с помощью скриптов?
  • Interesting Posts

    Запуск комбинации клавиш vim при запуске

    Как grep слово после / summary / в переменной и хранить слово в новой переменной в сценарии bash

    С pam_script, как мне передать PAM_AUTHTOK и PAM_USER во всех случаях?

    Тестирование, если дескриптор файла действителен

    Как подсчитать количество строк в файле UTF-16LE / CR-LF / BOM?

    Использование переменной для выполнения команды curl

    Что случилось с моим скриптом проверки файлов?

    Сетевое соединение Ubuntu 10.10 сократилось через несколько минут после запуска

    Не удается запустить библиотеки python из-за проблем с python 2/3

    Сумма каждого столбца в файле должна быть гибкой для количества столбцов, которые находятся в файле

    Как проверить текущую версию ядра?

    разрешить доступ пользователей через ssh к / var / www /

    Почему sudo не перенаправляет stdout в файл / etc / file, но sudo 'nano' или 'cp' могут?

    Скромная установка на WIN 7 без прав администратора

    Более сжатые методы для обертывания файла, чем использование sed

    Linux и Unix - лучшая ОС в мире.