Выполнение фона параллельно

У меня есть программа ./pgm принимающая некоторые аргументы (скажем -a file1 -b val ), для выполнения которой требуется 2 секунды. Я хотел бы использовать все процессоры на моей машине для запуска этой программы во всех входных файлах параллельно (около 1000). Теперь я делаю все команды

 ./pgm -a file1 -b 12 > out1.txt & ./pgm -a file2 -b 14 > out2.txt & ./pgm -a file3 -b 16 > out3.txt & ./pgm -a file4 -b 18 > out4.txt & ... 

в файле и выполнить этот файл. Я думал, что это будет использовать все доступные процессоры, но количество параллельных исполнений очень ограничено.

Как я могу это достичь? Обратите внимание, что parallel команда не является опцией.

2 Solutions collect form web for “Выполнение фона параллельно”

С GNU xargs :

 seq 1000 | xargs -P4 -n1 sh -c 'exec ./pgm -a "file$1" -b 12 > "out.$1"' sh & 

Будет работать до 4 ./pgm s параллельно.

В противном случае, с pdksh / mksh / oksh :

 trap : CHLD n=0 for f in file*; do jobs=$(jobs | wc -l) if (($jobs < 4)); then ./pgm "$f" > out.$((++n)) & else wait fi done trap - CHLD wait 

детали обработки сигналов варьируются от одной оболочки к другой. Этот трюк работает в pdksh и его производных, но не в какой-либо другой оболочке, которую я пробовал. Вам нужна оболочка, в которой можно заблокировать SIGCHLD (исключая bash ), где обработчик SIGCHLD выполняется сразу (не заблокирован во время wait ) (исключая ash , yash ), где обработка SIGCHLD прерывает wait (исключая ksh93 и zsh ).

У меня был подобный вопрос. Поскольку вы указали parallel это не вариант, вам, возможно, потребуется swift изучить, как описано в ответе на этот вопрос.

  • Как запустить «gdbserver» в фоновом режиме?
  • В чем разница между запуском программы в качестве демона и разворачиванием ее в фоновом режиме с помощью «&»?
  • как получить код выхода из таймаута во время выполнения команды в фоновом режиме?
  • Как убедиться, что команда не прерывается, даже если терминал закрыт?
  • Предотвратить жизнь от раковины дольше, чем ее инициатор?
  • Сценарий оболочки ждет команды фона
  • Как не создать файл nohup.out, но сохранить вывод терминала?
  • Странная проблема с ловушкой и SIGINT
  • +/- после выполнения задания в фоновом режиме
  • Как завершить фоновый процесс?
  • Вилка SSH убивает соединение
  • Interesting Posts

    Настройка 4-интерфейса Shorewall

    Репликация столбца в однострочном файле CSV

    Как раскрасить текст в emacs?

    Интеграция Tmux ranger: открытие текстовых файлов в новых панелях

    Невозможно выполнить какую-либо операцию на плате MircoSD

    airmon-ng kali не перечисляет существующие интерфейсы на mac

    Вернуть вывод команды в ассоциативный массив

    Как я могу найти все самоопределенные переменные и функции для отмены?

    Как автоматически удалить виртуальную машину при ее выключении?

    Смешанный интерфейс из-за чтения двоичных файлов на экране

    Список явно удаленных пакетов (apt)

    Почему переменная PATH включает недопустимые пути каталога в Fedora 25?

    понять порядок операций для расширения параметра bash

    Как программы безопасности, такие как брандмауэр, IPS и IDS, имеют доступ к сетевым данным?

    Печатать размер содержимого каталога с помощью команды tree в дереве 1.5?

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