Skip to main content

Bash Subshells i przetwarzanie równoległe

Zegarek automatyczny – wszystko, co musisz wiedzieć! | TikTalk odc. 16 (Czerwiec 2026)

Zegarek automatyczny – wszystko, co musisz wiedzieć! | TikTalk odc. 16 (Czerwiec 2026)
Anonim

Powłoka jest podstawowym interfejsem do wprowadzania poleceń w systemie Linux. Dzięki niemu możesz wpisać polecenie bezpośrednio lub określić plik (skrypt) zawierający sekwencję poleceń do wykonania. Pociski są zorganizowane w hierarchii, a każda powłoka może utworzyć nową powłokę. Nowa powłoka jest traktowana jako proces podrzędny - podpowłokę powłoki nadrzędnej, która ją tworzy.

Domyślnie podpowłoki są zależne od rodzica w tym sensie, że jeśli proces nadrzędny zostanie zakończony, podpowł także również się kończy. Wszelkie dane wyjściowe są przekazywane z podpowłok do powłoki nadrzędnej.

Jak utworzyć podpowłokę

W skrypcie powłoki Bash tworzysz podpowłokę za pomocą notacji nawiasów:

W przykładzie pętla while jest ujęta w nawias, co powoduje, że jest wykonywana w podpowłoce powłoki, w której jest wykonywany plik skryptu.

Uruchamianie powłoki w tle

Dopóki nie określisz, że podpowłok ma być wykonywane w tle, nadrzędna powłoka czeka na zakończenie podpowstania przed kontynuowaniem reszty skryptu. Jeśli jednak chcesz uruchamiać podpowłoki równolegle, uruchamiasz je w tle, co jest realizowane za pomocą znaku ampersand po wyrażeniu podpowłoki, jak pokazano tutaj:

Uruchamianie wielu podpowłok w równoległym

Jeśli utworzysz wiele podpowłok jako procesów działających w tle, możesz uruchamiać zadania równolegle. Zwykle system operacyjny używa różnych procesorów lub rdzeni dla każdego procesu i podprocesu, zakładając, że istnieje co najmniej tyle procesorów lub rdzeni, ile jest procesów. W przeciwnym razie zadania są przypisywane do tych samych procesorów lub rdzeni. W takim przypadku procesor lub rdzeń w sposób ciągły przełącza się między przydzielonymi zadaniami do czasu zakończenia zadań. Następny przykład ma dwa podprocesy. Pierwszy liczy od 1 do 99, a drugi od 1000 do 1099.

Użyj instrukcji wait, aby nakazać procesowi nadrzędnemu oczekiwanie na zakończenie podprocesów przed kontynuowaniem dalszej części skryptu:

Wykorzystuje do podpowłoki

Podsady są użyteczne, gdy polecenia muszą być wykonywane w określonym środowisku lub katalogu. Jeśli każde polecenie zostanie wykonane w innej podpowłoce, nie ma ryzyka, że ​​zmienne ustawienia zostaną pomieszane. Po zakończeniu ustawienia i bieżący katalog nie muszą być przywracane, ponieważ żaden proces podrzędny nie ma wpływu na środowisko procesu macierzystego.

W definicjach funkcji można stosować podpowłoki, dzięki czemu można je wykonywać wielokrotnie z różnymi parametrami.