Domyślnym zachowaniem powłoki jest sekwencyjne przetwarzanie wszystkich wierszy skryptu powłoki. Podobnie oddzielanie poleceń średnikiem gwarantuje przetwarzanie sekwencyjne (seryjne). A co jeśli mamy np. procesor czterordzeniowy i chcemy, aby skrypt powłoki działał jednocześnie na wszystkich czterech rdzeniach - wielowątkowość? Rzućmy okiem.
Istnieje prosty sposób wykonywania procesów równoległych w systemie Unix. Wystarczy zastosować „sztuczkę” polegającą na uruchamianiu programów w tle rozmowy, wpisując ampresand & po istniejącym poleceniu. Jeśli uruchomisz polecenia w ten sposób, powłoka nie będzie czekać na zakończenie polecenia w tle, co daje korzyść w postaci przetwarzania równoległego.
Jak mogę sprawdzić, czy wszystkie polecenia uruchomione w tle zostały zakończone? Po uruchomieniu polecenia w tle należy zachować zawartość zmiennej $!, w której powłoka automatycznie zapisuje PID (Process ID) ostatniego skryptu, który był uruchamiany w tle w tej instancji powłoki. Jeśli mam więcej takich procesów, można je wszystkie po kolei przechowywać w tablicy powłoki.
Wystarczy do tego prosta pętla Until, w której określamy, że skrypt będzie „uśpiony” do czasu zakończenia wszystkich procesów z pola powłoki.
Marián Knězek