Niekedy, z výkonového hľadiska, chceme spustiť paralelne viaceré podprocesy zo shell skriptu a čakať kým všetky dobehnú, než pokračujeme ďalším kódom.
Prvá možnosť je príkaz wait. Ten čaká na všetky podprocesy, ja však zozbieram čísla procesov do premennej PIDS (reťazec), aby som čakal len na konkrétne.
PIDS=""
FAIL=0
for subor in `ls *.txt`; do
spracuj.sh $subor &
PIDS="$PIDS $!"
done
for job in $PIDS; do
wait $job || FAIL=1
done
Ak chceme spustiť niečo s x-paralelnými procesmi, aj s čakaním na dobehnutie, je tu druhá možnosť.
Xargs ponúka parameter P pre paralelizmus, v parametri I sa dá definovať skratka nahradzujúca parameter v paralelne spúšťanom príkaze (tu server z textového zoznamu, z ktorého SCP skopíruje subor.txt, paralelne 3 procesmi).
grep -v ^# zoznam_serverov.txt | xargs -n1 -I{} -P3 scp -B -o ConnectTimeout=6 {}:/tmp/subor.txt ./subory 2>log/log_err.log
Žiadne komentáre:
Zverejnenie komentára