9. 8. 2024

Shell - paralelné spúšťanie podprocesov vrámci skriptu

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