Научете како правилно да работите со Subshells користејќи баш скрипти

Како да ги наведам субвлениците да работат паралелно во позадина

Школка е основен интерфејс за внесување на команди на Linux систем. Со него, можете директно да внесете команда или да наведете датотека (скрипта) која содржи низа на команди што треба да се извршат. Школки се организирани во хиерархија, и секоја школка може да создаде нова школка. Новата школка се смета за дете процес - подслојка-на родилната школка која ја создава.

Стандардно, подслој зависи од нејзиниот родител во смисла дека ако родителскиот процес завршува, исто така се прекинува и потслугата. Секој излез е пренесен од поткопот до родителската школка.

Како да креирате подршка

Во Bash-скрипта, креирате подслој со користење на заглавието:

#! / bin / bash echo "Пред да започнеш подслој" (count = 1 додека [$ count -le 99] го повторува списокот "count count" 1 ((count ++)) echo "Finished"

Во примерот, циклусот додека е затворен во заграда, што предизвикува тоа да биде извршено во подслој на школка во која е извршена скриптната датотека.

Водење на Subshell во позадина

Освен ако не специфицирате дека подслобот треба да се изврши во заднина, родителската школка чека да заврши претставата пред да продолжите со остатокот од сценариото. Меѓутоа, ако сакате паралелно да ги извршите подслојките, ги извршувате во позадина, што се постигнува со амперсандниот знак следејќи го изразот подслојка, како што е прикажано тука:

#! / bin / bash echo "Пред да започнеш подслој" (count = 1 додека [$ count -le 99] го повторува списокот "count count" 1 ((count ++)) & echo "Finished"

Вклучување на повеќе придружни во паралела

Ако креирате повеќе подслојки како процеси во заднина, паралелно можете да извршувате задачи. Обично, оперативниот систем користи различни процесори или јадра за секој процес и подпроцес, претпоставувајќи дека има најмалку толку многу процесори или јадра како што постојат процеси. Во спротивно, задачите се доделуваат на истите процесори или јадра. Во тој случај, процесорот или јадрото постојано се префрлаат помеѓу доделените задачи се додека задачите не се завршат. Следниот пример има два потпроцеси. Првиот се брои од 1 до 99, а вториот од 1000 до 1099.

#! / bin / bash echo "Пред да започнеш подслој" (count = 1 додека [$ count -le 99] го повторува списокот "count count" 1 ((count ++))) & (count = 1000 додека [$ count -le 1099] го повторуваат "$ count" спиењето 1 ((count ++))) & echo "Finished"

Користете ја изјавата за чекање за да му кажете на родителот процес да чекаат за потпроцесите да завршат пред да продолжите со остатокот од скриптата:

#! / bin / bash echo "Пред да започнеш подслој" (count = 1 додека [$ count -le 99] го повторува списокот "count count" 1 ((count ++))) & (count = 1000 додека [$ count -le 1099] го повторуваат "$ count" спиењето 1 ((count ++))) и почекајте ехо "Завршено"

Употреба за Subshells

Subshells се корисни кога командите треба да се извршуваат во одредена околина или директориум. Ако секоја команда е извршена во друга подслојка, не постои ризик дека променливите подесувања ќе бидат измешани. По завршувањето, поставките и тековниот директориум не треба да се обновуваат, бидејќи средината на родителскиот процес не е засегната од некој од неговите подпроцеси.

Subshells може да се користи во дефиниции на функции, така што тие може да се извршуваат повеќе пати со различни параметри.