Bash paralelisiren

Gehen wir von folgenden Szenario aus. Wir wollen eine Funktion in Bash in den Hintergrund schreibe um den Ablauf zu Parallelisieren. In diesem Beispiel wird lediglich ein sleep ausgeführt.

#!/bin/bash

function background ()
{
  #do somsing
  sleep $1
}

for i in {1..100}; do
  background $i &
done

Problem: Wir wollen aber maximal nur 10 Prozesse gleichzeitig laufen lassen. Dafür habe ich eine Funktion waiting geschrieben die solange wartet bis die Anzahl des übergebenen wertes erreicht ist. Für das Zählen habe ich Dateien verwendet da wenn man Variablen übergeben würde diese nicht in der for schleife zur Verfügung stehen würden.

#!/bin/bash

tmpd=`mktemp -d`
function waiting() {
  while true; do
    if [ `ls $tmpd | wc -l` -le "$1" ]; then
      break
    fi
    sleep .5;
  done
}

function background () {
  touch $tmpd/$1
  #do somsing
  sleep $1
  rm $tmpd/$1
}

for i in {1..100}; do
  background $i &
  waiting 10
done

waiting 0
rm -r $tmpd