У мене в каталозі є маса зображень PNG. У мене є програма під назвою pngout, яку я запускаю для стиснення цих зображень. Ця програма викликається сценарієм, який я зробив. Проблема полягає в тому, що цей сценарій робить по черзі щось подібне:
FILES=(./*.png)
for f in "${FILES[@]}"
do
echo "Processing $f file..."
# take action on each file. $f store current file name
./pngout -s0 $f R${f/\.\//}
done
Обробка лише одного файлу за один раз займає багато часу. Після запуску цього додатка я бачу, що процесор становить лише 10%. Тож я виявив, що можу розділити ці файли на 4 серії, помістити кожну партію в каталог і запустити 4, з чотирьох вікон терміналів, чотири процеси, тож у мене є одночасно чотири екземпляри мого сценарію, обробляючи ці зображення та робота займає 1/4 часу.
Друга проблема полягає в тому, що я втратив час, поділяючи зображення та партії та копіюючи скрипт у чотири каталоги, відкриваю 4 вікна терміналу, бла-бла ...
Як це зробити з одним сценарієм, не розділяючи нічого?
Я маю на увазі дві речі: спочатку як я зі скрипту bash запустити процес на другий план? (просто додати & до кінця?) По-друге: як я припиняю надсилати завдання на задній план після відправлення четвертих завдань і ставити сценарій дочекатися закінчення завдань? Я маю на увазі, що просто відправлення нового завдання на задній план, коли одна задача закінчується, зберігаючи завжди 4 завдання паралельно? якщо я цього не роблю, цикл виводить на задній план мільйони завдань, і процесор забиється.