Ett skal är ett grundläggande gränssnitt för att komma in i kommandon på ett Linux-system. Med det kan du direkt ange ett kommando eller ange en fil (script) som innehåller en sekvens av kommandon som ska utföras. Skal organiseras i en hierarki, och alla skal kan skapa ett nytt skal. Det nya skalet anses vara ett barnprocess - en delskal - av moderskalet som skapar det.
Som standard är en subshell beroende av dess förälder i den meningen att om moderprocessen upphör, avslutas även subshell. Varje utmatning passeras från delskalet till moderskalet.
Hur man skapar en skål
I ett Bash skal-skript skapar du en delskal med parentesnotering:
I exemplet är mellanslingan inbäddad i parentes, vilket gör att den ska utföras i en delskal av skalet där manusfilen körs.
Köra en skål i bakgrunden
Om du inte anger att delhöljet ska utföras i bakgrunden, väntar huvudskalet på att delhöljet ska slutföras innan du fortsätter med resten av skriptet. Om du däremot vill köra subshells parallellt kör du dem i bakgrunden, vilket uppnås med ampersand-tecknet efter subshell-uttrycket, som visas här:
Kör flera subshells i parallell
Om du skapar flera subshells som bakgrundsprocesser kan du köra uppgifter parallellt. Typiskt använder operativsystemet olika processorer eller kärnor för varje process och delprocess, förutsatt att det finns minst lika många processorer eller kärnor som det finns processer. Annars är uppgifterna tilldelade samma processorer eller kärnor. I så fall växlar processorn eller kärnan kontinuerligt mellan de tilldelade uppgifterna tills uppgifterna är färdiga. Nästa exempel har två delprocesser. Den första räknas från 1 till 99, och den andra är från 1000 till 1099.
Använd vänteläge för att berätta förälderprocessen att vänta på att delprocesserna ska slutföras innan du fortsätter med resten av skriptet:
Användningar för Subshells
Subshells är användbara när kommandon måste utföras i en viss miljö eller katalog. Om varje kommando exekveras i en annan delhöjd finns det ingen risk för att variabla inställningar kommer att blandas upp. Efter avslutningen behöver inte inställningarna och den aktuella katalogen återställas, eftersom moderprocessens miljö inte påverkas av någon av dess delprocesser.
Subshells kan användas i funktionsdefinitioner så att de kan utföras flera gånger med olika parametrar.