Bash Subshells og Parallell Processing
EN skall er et grunnleggende grensesnitt for å legge inn kommandoer på en Linux system. Med den kan du skrive inn en kommando direkte eller spesifisere en fil (skript) som inneholder en sekvens av kommandoer som skal utføres. Skjell er organisert i et hierarki, og ethvert skall kan opprette et nytt skall. Det nye skallet betraktes som en barneprosess—a subshell— av foreldreskallet som skaper det.
Som standard er et underskall avhengig av det overordnede i den forstand at hvis overordnet prosessen avsluttes, avsluttes også underskallet. Enhver utgang sendes fra underskallet til det overordnede skallet.

Hvordan lage et subshell
I et Bash shell-skript, lag et subshell ved å bruke parentesnotasjonen:
#!/bin/bash
# subshell-example.sh med endeløs loop
(
mens [ 1 ]
gjøre
echo "Subshell kjører.. ."
ferdig
)
I eksemplet er while-løkken omsluttet av parentes, noe som fører til at den kjøres i et underskall av skallet der skriptfilen kjøres.
Kjøre et subshell i bakgrunnen
Med mindre du spesifiserer at underskallet skal kjøres i bakgrunnen, venter det overordnede skallet på at underskallet er ferdig før det fortsetter med resten av skriptet. Men for å kjøre underskall parallelt, kjør dem i bakgrunnen, noe som gjøres med og-tegnet etter underskall-uttrykket, som vist her:
#!/bin/bash
for ip i {1..254}; gjøre
host=192.168.1.$ip
(ping -c 1 $host > /dev/null
hvis [ "$?" = 0 ]
deretter
echo $host
fi) &
ferdig
Kjører flere underskall parallelt
Hvis du oppretter flere underskall som bakgrunnsprosesser, kan du kjøre oppgaver parallelt. Vanligvis bruker operativsystemet forskjellige prosessorer eller kjerner for hver prosess og delprosess, forutsatt at det er minst like mange prosessorer eller kjerner som det er prosesser. Ellers tildeles oppgaver til de samme prosessorene eller kjernene. I så fall bytter prosessoren eller kjernen kontinuerlig mellom de tildelte oppgavene til oppgavene er fullført.
Bruk wait-setningen for å fortelle den overordnede prosessen om å vente til underprosessene er ferdige før du fortsetter med resten av skriptet:
Brukes for Subshells
Subshells er nyttige når kommandoer må utføres i et bestemt miljø eller katalog. Hvis hver kommando utføres i et annet underskall, er det ingen risiko for at variable innstillinger blir blandet sammen. Etter fullføring trenger ikke innstillingene og gjeldende katalog å gjenopprettes, siden miljøet til den overordnede prosessen ikke påvirkes av noen av underprosessene.
Subshells fungerer med funksjonsdefinisjoner, kjørbare mange ganger med forskjellige parametere.