LINUX.ORG.RU

Как в консоли параллельно выполнять обработку нескольких файлов?

 


1

2

Есть консольная утилита pngcrush и надо ею пережать несколько тысяч картинок.
С помощью find написал обработку их всех. Но такое решение обрабатывает одну картинку за раз используя одно ядро.
Как сделать запуск нескольких процессов pngcrush?

Ответ на: комментарий от anonymous

Если религия не позволяет ставить parallel, то параллельный режим есть у xargs. Но первый проще использовать. И он может раскидывать работу по разным машинам.

legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 1)

Один & в конце строки отправляет процесс в фон и печатает pid этого процесса

Значит делаешь восемь или сколько тебе надо переменных в которых этот pid хранишь и в цикле проверяшь с помощью ps существование процессов с именем pngcrush и хранимым в этой переменой pid.
Как не нащёл процесса то запускаешь процедуру которая запустит новый процесс pngcrush и запомнит его в этой переменной.

Делается всё это на bash

torvn77 ★★★★★ ()
Последнее исправление: torvn77 (всего исправлений: 2)
Ответ на: комментарий от torvn77

Значит делаешь восемь или сколько тебе надо переменных в которых этот pid хранишь и в цикле проверяшь с помощью ps существование процессов

Не надо переменных и вызывать ps. Достаточно смотреть встроенной командой job. Иначе у вас на ps и уйдёт целое ядро :)

vodz ★★★★★ ()
Ответ на: комментарий от vodz

jobs наверное?

Как я понял она сугубо интерактивная и в скрипт её встроить нельзя, потому что не позволяет форматировать свой вывод, а вот ps можно настроить так, что при запуске она будет выводить только одно нужное значение ps -p$current_pid -o comm

torvn77 ★★★★★ ()
Ответ на: комментарий от i-rinat

Обычно заводят счётчик и пуляют задачи пока они есть и пока количество порождённых процессов меньше желаемого. А эти регистранты какие-то странные.

anonymous ()
Ответ на: комментарий от i-rinat

Да хз. Я чет написал, а уже потом вспомнил про job, но память подвела, и я не помнил, оно это или нет. Поэтому вариант торвн77 мне показался вполне логичным.

Zhbert ★★★★★ ()