Jak jsme se dozvěděli v kapitolce o práci s procesy, pomocí & můžeme spouštět programy na pozadí. Toho můžeme vhodně využít k psaní paralelních programů. V shellovém neinteraktivním skriptu nelze použít příkazy fg a bg, obejdeme se však bez nich.
Tento skript odpočítá čísla od jedné do deseti, jedno za vteřinu a vytvoří kvůli tomu deset samostatných procesů.
#!/bin/sh sleep_and_echo() { sleep $1 echo $1 } for i in $(seq 1 10); do sleep_and_echo $i & echo "Spuštěn proces č. $i s PID $!" done wait
$!
fungují jak bylo popsáno výše.ps
testujeme, zda proces stále
existuje. Další možností je synchronizace pomocí souborů, obzvláště vhodné
jsou pro tento účel pojmenované roury.Pokud bychom chtěli zpracovat velké množství záznamů, ale vždy maximálně 10 najednou, můžeme použít vyčkávací smyčku. Pomocí příkazu jobs zjistíme kolik nám aktuálně běží procesů na pozadí a další proces spustíme až tehdy, když tento počet klesne pod 10:
for vec in $veci; do while [ $(jobs | wc -l) -ge 10 ]; do sleep 1 done zpracuj $vec & done