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

У меня есть программа ./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 изучить, как описано в ответе на этот вопрос.

  • Как завершить фоновый процесс?
  • Есть ли предел для процессов, которые я могу запустить в фоновом режиме?
  • Как sh -e взаимодействует с &?
  • Как узнать, закончилась ли фоновая работа?
  • перенаправление вывода работы фонового задания в bash
  • фоновая работа продолжает останавливаться
  • В чем разница между запуском программы в качестве демона и разворачиванием ее в фоновом режиме с помощью «&»?
  • Диалог - Продолжить в фоновом режиме
  • В чем разница между запуском «command &» и «command -D»
  • Как запустить длинный grep, вывести результат на меньшее и поместить все на задний план?
  • Запустите фоновый процесс из сценария и управляйте им, когда скрипт заканчивается
  • Linux и Unix - лучшая ОС в мире.