Engegar i gestionar treballs en paral·lel

#!/bin/bash

sleep 1 &
T1=${!}
sleep 4 &
T2=${!}
sleep 6 &
T3=${!}
sleep 8 &
T4=${!}
sleep 10 &
T5=${!}

# amb jobs, veiem el número de treballs que estem executant, no el PID
#jobs

echo "Aquests script engega 5 processos en fons amb els PID's ${T1}, ${T2}, ${T3}, ${T4}, ${T5}."

# esperem a què acabi el T1 per executa l'echo (no continuem fins que acabi)
wait ${T1}
echo "El fil 1 (sleep 1) amb el PID ${T1} ha acabat!"

# esperem a què acabi el T2 per executa l'echo (si no ha acabat T1, mai arribarem aquí)
wait ${T2}
echo "El fil 2 (sleep 4) amb el PID ${T2} ha acabat!"

Una altra versió…

#!/bin/bash
echo Copiant fitxers...
PIDs=""
for I in *.png
do
    convert "$I" "jpg/$(basename "$I" .png).jpg" &
PIDs+="$! "
done
wait $PIDs
echo Fet!

Limitant a 10 jobs …

!/bin/bash
echo Copiant fitxers...
PIDs=""
function max2 {
   while [ `jobs | wc -l` -ge 10 ]
   do
      sleep 1
   done
}

for I in *.png
do
   max2; convert "$I" "jpg/$(basename "$I" .png).jpg" &
done
wait $PIDs
echo Fet!
2021-08-18T08:31:09+02:0010 08 2021|bash, linux|