Learje hoe't jo subsydzjes goed brûke kinne troch Bash-skripts

Hoe't subsydzjes ynstruearje yn parallel parallele wurde

In shell is in basic interface foar ynkommensbeheardingen op in Linux systeem. Hjirmei kinne jo in kommando ynfiere ynfiere of in bestân (skript) opjaan dy't in opdracht fan kommando's útfiert. Shells wurde organisearre yn in hierargy, en elke shell kin in nije shell meitsje. De nije shell wurdt beskôge as in bernprosipe - in subshell fan 'e heule shell dy't it skeelt.

Standert is in subshell ôfhinklik fan har âlder, yn 't sin dat as it âlderproses begjint, dan ek it subshell útskeakele. Alle útfier wurdt oerjûn troch it subshell nei de âldere shell.

Hoe meitsje in subshell

Yn in Bash-shell-skript meitsje jo in subshell mei de parenthese-notaasje:

#! / bin / bash echo "foardat subshell" (count = 1 wylst [$ count -le 99] do echo "$ count" sliepe 1 ((count ++)) dien) echo "Finished"

Yn it foarbyld is de skoft yn 'e klokken omskot, wêrtroch't it útfiert wurde yn in subshell fan' e shell wêryn't de skripttriem útfierd wurdt.

It rinnen fan in subshell yn 'e eftergrûn

As jo ​​opnij oanpasse dat it subshell yn 'e eftergrûn útfierd wurde sil, wachtet de haadtafel foar it subshell om te begjinnen foardat jo trochgean mei it skript fan it skript. As jo ​​parallel diels subshells wolle, dan rjochtsje se op 'e eftergrûn, wêrtroch't it ampersand-karakter folget nei de subshell-ekspresje, sa't hjir stiet:

#! / bin / bash echo "Foar it begjin fan subshell" (count = 1 wylst [$ count -le 99] do echo "$ count" sliepe 1 ((count ++)) dien) & echo "Finished"

Meardere subshellingen útfiere yn parallel

As jo ​​mear subshells as eftergrûnprosessen oanmeitsje, kinne jo pakketten dwaan. Typysk betsjuttet it bestjoeringssysteem ûnderskate prosesjes of kearnen foar elke proses en subprosessen, oan te lûken dat der op syn minst sa folle prosessen of kearnen binne as der prozessen binne. Oars wurde taken taken oan deselde prosessor of kearndoelen. Yn dat gefal wikselet de prosessor of de kern kontinu oere tusken de oanbelangjende taken oant de taak binne foltôge. It folgjende foarbyld hat twa subprozesses. De earste jout 1 oant 99, en de twadde fan 1000 oant 1099.

#! / bin / bash echo "Foar it begjin fan subshell" (count = 1 wylst [$ count -le 99] echo "$ count" sliepe 1 ((count ++)) dien) & (count = 1000 wylst [$ count -le 1099] do echo "$ count" sliepe 1 ((count ++)) dien) & echo "Finished"

Brûk de wittenskiplike deklaraasje om it âlderproses te fertellen om te wachtsjen foar de subprosessen te fertellen foardat jo mei it oare skript trochgean:

#! / bin / bash echo "Foar it begjin fan subshell" (count = 1 wylst [$ count -le 99] echo "$ count" sliepe 1 ((count ++)) dien) & (count = 1000 wylst [$ count -le 1099] do echo "$ count" sliepe 1 ((count ++)) dien) & wachtsje echo "Finished"

Gebrûk foar subsydzjes

Subshells binne brûkber as kommando's útfierd wurde yn in bepaalde omjouwing of map. As elke kommando útfierd wurdt yn in oare subshell, dan is der gjin risiko dat variable farianten mingd wurde. Op it foltôgjen moatte de ynstellings en it aktive triem net opnij restaurearje, om't de omjouwing fan 'e memmebestand net beynfloede is troch ien fan har subprosessen.

Subshells kinne brûkt wurde yn funksje definysjes sadat sy meardere kearen mei ferskate parameter útfierd wurde kinne.