Shell se standardně chová tak, že zpracovává sekvenčně všechny řádky shellovského skriptu. Stejně tak oddělení příkazů středníkem zaručuje sekvenční (sériové) zpracování. Co ale když máme např. čtyřjádrový procesor a chceme, aby se shellovský skript prováděl současně na všech čtyřech jádrech - multithreading? Pojďme se na to mrknout.
Existuje jednoduchý způsob, jak udělat paralelní procesy po unixem . Stačí použít „fintu“ spuštění programů na pozadí talk, že za existujícím příkazem napíšeme ampresand &. Pokud takto spustíte příkazy, shell nečeká, až se příkaz na pozadí ukončí, máte výhodu paralelního zpracování.
Jak odsleduji, jestli mi skončily všechny příkazy, které jsem spustil na pozadí? Po spuštění příkazu na pozadí je třeba uchovat obsah proměnné $!, do které shell automaticky zaznamenává PID (Process ID) posledního skriptu, který byl spuštěn na pozadí v této instanci shellu. Pokud mám takových procesů více, lze všechny postupně uchovat do shellovského pole.
Stačí k tomu jednoduchá smyčka until, do které uvedeme, že bude skript „spát“ až do doby, než se ukončí všechny procesy ze shellovského pole.
Marián Knězek