Você pode emular a mesma coisa substituindo seus xargs por um script ksh. Por exemplo:
#!/bin/ksh
nproc=0 max=20
trap 'let nproc--' sigchld
while read file
do while [ $nproc -ge $max ]
do sleep 1
done
process.sh "$file" &
let nproc++
done
wait
A variável de shell nproc
conta o número de processos em que foi executada
o fundo. Quando um processo termina, o shell captura o sinal SIGCLD para
decrementar a variável. Um loop de pesquisa de suspensão interrompe mais de max
dos processos iniciados.