Escreva Makefile
para ele e execute make -j 20
.
Você pode escrever Makefile com script de shell
Eu estou tentando executar 20 files
por vez, usando warc.sh ou uma maneira melhor de colocar 20 instâncias de warc.sh por vez com o conteúdo do diretório como entrada. Também estou tentando observar os PIDs no caso de coisas ruins acontecerem e carregar uma nova instância com uma nova entrada sempre que uma instância antiga terminar.
# test if files exists and run
if [ "$(ls -A ${base_dir}/schedule)" ]; then
# function to be backgrounded
track()
{
./warc "${base_dir}/schedule/$1 printf" "\nFinished: %d\n" "$1"
}
start=$(date '+%s')
# Make an associative array in which you'll record pids.
declare -A pids
# Background an instance of the track() function for each number, record the pid.
for n in 'ls -A ${base_dir}/schedule'; do
if [ ${#pids[@]} > 20 ]; then
track $n &
pid=$!
echo "Backgrounded: $n (pid=$pid)"
pids[$pid]=$n
else
echo 'Sleeping' ; sleep 2
fi
done
# Watch your stable of backgrounded processes.
# If a pid goes away, remove it from the array.
while [ -n "${pids[*]}" ]; do
sleep 1
for pid in "${!pids[@]}"; do
if ! ps "$pid" >/dev/null; then
unset pids[$pid]
echo "unset: $pid"
fi
done
if [ -z "${!pids[*]}" ]; then
break
fi
printf "\rStill waiting for: %s ... " "${pids[*]}"
done
printf "\r%-25s \n" "Done."
fi
Neste momento, isso está completamente fora de controle e criando mais de 900 processos em segundo plano = /
Tags bash linux pid parallel-processing