Ვისწავლოთ სწორად აწარმოებს Subshells გამოყენებით Bash Scripts

როგორ გვასწავლოს Subshells გასაშვებად პარალელურად ფონზე

Shell არის ძირითადი ინტერფეისი შესვლის ბრძანებები Linux სისტემა. მასთან ერთად შეგიძლიათ შეიყვანოთ ბრძანება პირდაპირ ან დააკონკრეტო ფაილი (სკრიპტი), რომელიც შეიცავს ბრძანებების რიგით შესრულებას. ჭურვი იმართება იერარქიაში და ნებისმიერ ჭურვი შეუძლია შექმნას ახალი ჭურვი. ახალი ჭურვი განიხილება ბავშვის პროცესი - შვილი, რომელიც ქმნის მას.

ჩვეულებრივ, სუბჰელი დამოკიდებულია მის მშობელზე იმასთან დაკავშირებით, რომ თუ მშობლის პროცესი წყდება, სუბშეელიც წყდება. ნებისმიერი გამომავალი გარდაცვლილისაგან გარდაცვლილის გარდაცვალების შემდეგ.

როგორ შევქმნათ Subshell

In Bash Shell სცენარი, თქვენ შექმნით subshell გამოყენებით ფრჩხილების ნოტაცია:

#! / bin / bash echo "subshelll- ის დაწყებამდე" (count = 1 ხოლო [$ count -le 99] echo "$ count" ძილი 1 ((count ++)) გაკეთებულია echo "Finished"

მაგალითად, ხოლო loop თან ერთვის ფრჩხილებში, რაც იწვევს მას შესრულდება shell- ის subshelll- ში, რომელშიც სკრიპტის ფაილი შესრულებულია.

გაშვებული Subshell ფონზე

თუ არ დააკონკრეტებთ, რომ ქვედანაყოფი უნდა შესრულდეს ფონზე, მშობელი ჭურვი ელოდება სუბფელის დასრულებას, სანამ გაგრძელდება დანარჩენი სცენარი. თუმცა, თუ პარალელურად აიღებთ ქვესახეებს, მათ ატარებ მათ ფონზე, რომელიც შეესაბამება ამპერსონალურ ხასიათს, რომელიც გამოხატავს შემდეგს:

#! / bin / bash echo "დაწყებამდე subshelll" (ითვლიან = 1 ხოლო [$ count -le 99] echo "$ count" ძილის 1 ((count ++)) გაკეთდა) და echo "Finished"

პარალელურად მრავალრიცხოვანი შაბლონების გაშვება

თუ თქვენ შექმნით მრავალჯერად ფულს, როგორც ფონის პროცესებს , შეგიძლიათ აწარმოოთ ამოცანები პარალელურად. როგორც წესი, ოპერაციული სისტემა იყენებს სხვადასხვა პროცედურებს ან ბირთვებს თითოეული პროცესისთვის და ქვეპროცესისთვის, ვარაუდობენ, რომ სულ მცირე, როგორც ბევრი პროცესორი ან ბირთვი, როგორც არის პროცესები. წინააღმდეგ შემთხვევაში, ამოცანები ენიჭება იმავე პროცესორებს ან კურსებს. ასეთ შემთხვევაში, პროცედურა ან ძირითადი მუდმივად გადაერთვება დავალებებს შორის დავალებამდე. შემდეგი მაგალითია ორი ქვეპროცესი. პირველი რიცხვი 1-დან 99-მდე, მეორე კი 1000-დან 1099-მდე.

#! / bin / bash echo "subshelll- ის დაწყებამდე" (ითვლიან = 1 ხოლო [$ count -le 99] echo "$ count" ძილი 1 ((count ++)) გაკეთდა და (count = 1000 ხოლო [ 1099] ეხო "$ count" ძილის 1 ((count ++)) გაკეთდა) და ეხო "დასრულებული"

გამოიყენეთ ლოდინის განაცხადი, რათა დაელაპარაკო მშობელი პროცესს, რომ დაემორჩილონ ქვეპროცესებს დამთავრებამდე დანარჩენი სცენარის დაწყებამდე:

#! / bin / bash echo "subshelll- ის დაწყებამდე" (ითვლიან = 1 ხოლო [$ count -le 99] echo "$ count" ძილი 1 ((count ++)) გაკეთდა და (count = 1000 ხოლო [ 1099] ეხო "$ count" ძილის 1 ((count ++)) გაკეთდა) და დაველოდოთ ეხო "დასრულებული"

იყენებს შაბლონებისათვის

Subshells სასარგებლოა როდესაც ბრძანებები უნდა შესრულდეს კონკრეტულ გარემოში ან დირექტორიაში. თუ თითოეული ბრძანება შესრულებულია სხვადასხვა ქვედანაყოფში, არ არსებობს რისკი, რომ ცვლადი პარამეტრები შერეულია. დასრულების შემდეგ, პარამეტრების და მიმდინარე დირექტორია არ უნდა აღდგეს, რადგან გარემო მშობელი პროცესის გავლენას არ ახდენს მისი subprocesses.

Subshells შეიძლება გამოყენებულ იქნას ფუნქციის განმარტებებში ისე, რომ ისინი შეიძლება შესრულდეს მრავალჯერ სხვადასხვა პარამეტრებით.