Я пытаюсь запустить 20 files
одновременно, используя warc.sh или лучший способ указать 20 экземпляров warc.sh одновременно с содержимым каталога в качестве входных данных. Я также пытаюсь посмотреть PID на случай, если случится что-то плохое, и загружать новый экземпляр новым входом каждый раз, когда старый экземпляр завершается.
# 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
Прямо сейчас это полностью выходит из-под контроля и создает фоновый процесс плюс 900 =/