Adicione a seguinte função bash / zsh ao seu .bashrc ou .zshrc:
function throttle() {
local throttle_procs
if [[ -z $1 ]] ; then
throttle_procs=2
else
throttle_procs=$1
fi
while [[ $(jobs -p | wc -l) -ge $throttle_procs ]] ; do
sleep 0.33;
done
}
Em seguida, use-o assim:
$ for i in $(seq 1 10); do
echo $i: $(date)
sleep $(shuf -i 1-5 -n 1) & throttle 3
done
Seu shell irá gerar até três processos (com base no argumento passado para a throttle
função) e então bloquear até que um ou mais dos processos em segundo plano sejam concluídos.
(Este é um exemplo um tanto modificado daqui: http://prll.sourceforge.net/shell_parallel.html )