Limitando processos paralelos em seu shell

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 throttlefunçã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 )