Aflați cum să difuzați în mod corespunzător subgrupuri folosind Scripturi Bash

Cum să instruiți subsilele să ruleze în paralel în fundal

O shell este o interfață de bază pentru introducerea comenzilor pe un sistem Linux. Cu aceasta, puteți introduce o comandă directă sau puteți specifica un fișier (script) care conține o secvență de comenzi care trebuie executate. Shell-urile sunt organizate într-o ierarhie și orice coajă poate crea o cochilie nouă. Noul shell este considerat un proces copil - un subshell - al coajă-mamă care o creează.

În mod implicit, un subshell depinde de părintele său, în sensul că, dacă procesul părinte se termină, subshellul se termină de asemenea. Orice ieșire este trecută de la subshell la shell-ul părinte.

Cum se creează o corespondență

Într-un script de shell Bash, creați un subshell utilizând notarea paranteză:

# count / 1 echo "Inainte de a incepe subshell-ul" (numar = 1 in timp ce [$ count -le 99] echo "

În exemplu, buclă în timp este închisă în paranteză, ceea ce face ca aceasta să fie executată într-un subshell al shell-ului în care este executat fișierul script.

Rularea unui substrat în fundal

Cu excepția cazului în care specificați că subshell-ul trebuie executat în fundal, coaja părinte așteaptă ca subshell-ul să se termine înainte de a continua cu restul scriptului. Cu toate acestea, dacă doriți să rulați subshell-uri în paralel, le executați în fundal, care este realizat cu caracterul ampersand urmând expresia subshell, după cum se arată aici:

# count / 1 echo "înainte de a începe subshell" (count = 1 în timp ce [$ count -le 99] echo "$ count" somn 1 ((count ++)) done & echo "

Rularea submultiilor multiple în paralel

Dacă creați mai multe subshell-uri ca procese de fundal, puteți executa sarcini în paralel. În mod tipic, sistemul de operare utilizează procesoare sau nuclee diferite pentru fiecare proces și subproces, presupunând că există cel puțin atât de multe procesoare sau nuclee ca și procesele. În caz contrar, sarcinile sunt atribuite acelorași procesoare sau nuclee. În acest caz, procesorul sau nucleul comută continuu între sarcinile atribuite până la finalizarea sarcinilor. Următorul exemplu are două subprocese. Primul contează de la 1 la 99, iar al doilea de la 1000 la 1099.

# (numar = 1) in timp ce [$ count -le 99] face echo "$ count" somn 1 ((count ++)) done & 1099] faceți echo "$ count" somn 1 ((count ++)) done) & echo "Finished"

Utilizați instrucțiunea wait pentru a spune procesului părinte să aștepte finalizarea subproceselor înainte de a continua cu restul scriptului:

# (numar = 1) in timp ce [$ count -le 99] face echo "$ count" somn 1 ((count ++)) done & 1099] faceți echo "$ count" somn 1 ((count ++)) done) & așteptați echo "Finished"

Utilizează pentru subansamble

Semnalele grafice sunt utile atunci când comenzile trebuie executate într-un anumit mediu sau într-un director. Dacă fiecare comandă este executată într-un subshell diferit, nu există riscul ca setările variabilelor să fie amestecate. La finalizare, setările și directorul curent nu trebuie să fie restaurate, deoarece mediul procesului părinte nu este afectat de nicio subprocesare a acestuia.

Subsalele pot fi utilizate în definițiile funcțiilor, astfel încât acestea să poată fi executate de mai multe ori cu parametri diferiți.