potrebujem upravit script tak aby aplikacia vedela spustit viacero vypoctou naraz, lebo mam k dispozicii n-procesorovy stroj, aplikacia vie bezat prave na jednom procesore a ku kazdemu vypoctu mam vstup, celkovo mam m vstupov, kde m>n. Potrebujem aby mi naraz bezalo len n vypocou. Za pomoc vopred dakujem.
Tu je script co som apisal:
for $input_file in $input_files
do
output = $($APPLICATION $options $input_file)
# do something with output
done
na spustenie ulohy do pozadia v bash sluzi operator &
napr
./prikaz &
nasledne pomocou fg presunies do popredia
co treba vyriesit je presun vystupu do premmennej output ty to riesis cez operator $() jedna sa o tzv subshell takychto subshellov budes potrebovat N
a kazdy da vystup do svojej premennej.
Nakoniec som to riesil troska inak, lebo outputy si to vie zapisovat samo aj do vlastnych suborou. Cize zostavalo uz iba spustenie prave n procesou. Ale nechal som sa inspirovat &, nepocopil som vsak uplne ako vyuzit fg.
Tu je moj kod:
$PROCESSORS=#n
$ITERATOR
for $INPUT in $INPUT_FILES; do
$APPLICATION $OPTIONS $INPUT &
# Tu je zrejme treba niekde vyuzit to fg
# ak by som to chcel
# OUTPUT[$ITERATOR]=$($APPLICATION $OPTIONS $INPUT &)
PID[$ITERATOR]=$! #Na zistenie pid-u poslednej spustenej aplikacie
if [ $ITERATOR -eq $PROCESSORS ]; then
wait ${PID[0]}
wait ${PID[1]}
# ...
wait ${PID[n]}
# Mozno by sa to dalo skratit nejako takto
# for $I in 'seq 0 $PROCESSORS'; do
# wait ${PID[$I]}
# done
$ITERATOR=0
fi
done