ስርዓተ ክወናዎች: ሶስት ቀላል ክፍሎች. ክፍል 3፡ የሂደት ኤፒአይ (ትርጉም)

የስርዓተ ክወናዎች መግቢያ

ሃይ ሀብር! ተከታታይ መጣጥፎችን ወደ እርስዎ ትኩረት ማምጣት እፈልጋለሁ - በእኔ አስተያየት የአንድ አስደሳች ሥነ ጽሑፍ ትርጉሞች - OSTEP። ይህ ጽሑፍ ዩኒክስ መሰል ኦፕሬቲንግ ሲስተሞችን ማለትም ከሂደቶች ጋር መሥራትን፣ የተለያዩ መርሐ-ግብሮችን፣ ማህደረ ትውስታን እና ሌሎች ዘመናዊ ስርዓተ ክወናን የሚያካትቱ ተመሳሳይ ክፍሎችን በጥልቀት ያብራራል። የሁሉም ቁሳቁሶች ዋናውን እዚህ ማየት ይችላሉ እዚህ. እባክዎን ትርጉሙ የተደረገው ሙያዊ ባልሆነ መልኩ (በነጻነት) መሆኑን ግን አጠቃላይ ትርጉሙን እንደያዝኩ ተስፋ አደርጋለሁ።

በዚህ ጉዳይ ላይ የላብራቶሪ ስራ እዚህ ሊገኝ ይችላል-

ሌሎች ክፍሎች፡-

እንዲሁም የእኔን ቻናል በ ላይ ማየት ይችላሉ። ቴሌግራም =)

ማንቂያ! ለዚህ ትምህርት ላብራቶሪ አለ! ተመልከት github

ሂደት API

በ UNIX ስርዓት ውስጥ ሂደትን የመፍጠር ምሳሌን ተመልከት. በሁለት የስርዓት ጥሪዎች ይከናወናል ሹካ () и exec().

ሹካ () ይደውሉ

ስርዓተ ክወናዎች: ሶስት ቀላል ክፍሎች. ክፍል 3፡ የሂደት ኤፒአይ (ትርጉም)

ሹካ () ጥሪ የሚያደርግ ፕሮግራም አስቡበት። የአፈፃፀሙ ውጤት እንደሚከተለው ይሆናል.

ስርዓተ ክወናዎች: ሶስት ቀላል ክፍሎች. ክፍል 3፡ የሂደት ኤፒአይ (ትርጉም)

በመጀመሪያ ደረጃ, ዋናውን () ተግባርን እናስገባለን እና ገመዱን ወደ ማያ ገጹ ላይ እናተምታለን. ሕብረቁምፊው የሂደቱን መታወቂያ ይዟል, እሱም በዋናው ውስጥ ይባላል የ PID ወይም የሂደት መለያ። ይህ ለዪ ሂደትን ለማመልከት በ UNIX ውስጥ ጥቅም ላይ ይውላል። የሚቀጥለው ትዕዛዝ ሹካ () ጥሪውን ያስፈጽማል. በዚህ ጊዜ የሂደቱ ትክክለኛ ቅጂ ይፈጠራል። ለስርዓተ ክወናው, ተመሳሳይ ፕሮግራም 2 ቅጂዎች በሲስተሙ ውስጥ እየሰሩ ያሉ ይመስላል, ይህም በተራው የፎርክ () ተግባርን አፈፃፀም ይወጣል. አዲስ የተፈጠረው የልጅ ሂደት (ከፈጠረው የወላጅ ሂደት ጋር በተያያዘ) ከዋናው () ተግባር ጀምሮ አይተገበርም። የልጁ ሂደት የወላጅ ሂደት ትክክለኛ ቅጂ እንዳልሆነ መታወስ አለበት, በተለይም የራሱ የአድራሻ ቦታ, የራሱ መዝገቦች, የራሱ ጠቋሚ ወደ ፈጻሚ መመሪያዎች እና የመሳሰሉት. ስለዚህ, ወደ ሹካ () ተግባር ጠሪው የተመለሰው ዋጋ የተለየ ይሆናል. በተለይም የወላጅ ሂደት የልጁን ሂደት የ PID እሴት ይመልሳል, እና ህጻኑ ከ 0 ጋር እኩል የሆነ እሴት ይቀበላል. ሥራ ። ይሁን እንጂ የዚህ ፕሮግራም አፈፃፀም በጥብቅ አልተገለጸም. በ 2 ሂደቶች ከተከፋፈሉ በኋላ ስርዓተ ክወናው እነሱን በተመሳሳይ መንገድ መከታተል እና ስራቸውን ማቀድ ይጀምራል. በነጠላ-ኮር አንጎለ ኮምፒውተር ላይ የማስፈጸሚያ ሁኔታ, ከሂደቶቹ ውስጥ አንዱ, በዚህ ሁኔታ, ወላጅ መስራቱን ይቀጥላል, ከዚያም የልጁ ሂደት ይቆጣጠራል. እንደገና ሲጀመር ሁኔታው ​​የተለየ ሊሆን ይችላል.

ለመጠበቅ ይደውሉ()

ስርዓተ ክወናዎች: ሶስት ቀላል ክፍሎች. ክፍል 3፡ የሂደት ኤፒአይ (ትርጉም)

የሚከተለውን ፕሮግራም ተመልከት። በዚህ ፕሮግራም, ጥሪ በመኖሩ ምክንያት ጠብቅ() የወላጅ ሂደት ሁል ጊዜ የልጁ ሂደት እስኪያልቅ ድረስ ይጠብቃል። በዚህ አጋጣሚ በስክሪኑ ላይ በጥብቅ የተገለጸ የጽሑፍ ውጤት እናገኛለን።

ስርዓተ ክወናዎች: ሶስት ቀላል ክፍሎች. ክፍል 3፡ የሂደት ኤፒአይ (ትርጉም)

exec () ጥሪ

ስርዓተ ክወናዎች: ሶስት ቀላል ክፍሎች. ክፍል 3፡ የሂደት ኤፒአይ (ትርጉም)

ፈተናውን ተመልከት exec(). ይህ የስርዓት ጥሪ ሙሉ ለሙሉ የተለየ ፕሮግራም ለመስራት ስንፈልግ ጠቃሚ ነው። እዚህ እንጠራዋለን execvp() የቃላት ቆጠራ ፕሮግራም የሆነውን የwc ፕሮግራም ለማስኬድ። exec() ሲጠራ ምን ይሆናል? ይህ ጥሪ የሚተገበረው ፋይል ስም እና አንዳንድ ግቤቶች እንደ ክርክሮች ተላልፏል። ከዚያ በኋላ, ኮድ እና የማይንቀሳቀስ ውሂብ ከዚህ ሊተገበር ከሚችለው ፋይል ተጭነዋል እና ከኮዱ ጋር ያለው የራሱ ክፍል ተጽፏል. እንደ ቁልል እና ክምር ያሉ ቀሪው ማህደረ ትውስታ እንደገና ተጀምሯል። ከዚያ በኋላ ስርዓተ ክወናው የክርክር ስብስቦችን በማለፍ ፕሮግራሙን በቀላሉ ያከናውናል. ስለዚህ አዲስ ሂደት አልፈጠርንም፣ አሁን እየሰራ ያለውን ፕሮግራም ወደ ሌላ የሩጫ ፕሮግራም ቀይረነዋል። በልጁ ውስጥ የኤክሴክ() ጥሪ ከተደረገ በኋላ ዋናው ፕሮግራም ጨርሶ ያልሰራ ይመስላል።

ይህ የጅምር ውስብስብነት ለዩኒክስ ሼል ፍጹም የተለመደ ነው፣ እና ይህ ሼል ከደወለ በኋላ ኮድ እንዲፈጽም ያስችለዋል። ሹካ ()ነገር ግን ከመደወል በፊት exec(). የእንደዚህ አይነት ኮድ ምሳሌ የሼል አካባቢን በትክክል ከመጀመሩ በፊት በሚሰራው ፕሮግራም ፍላጎቶች ላይ ማስተካከል ነው.

ቀለህ የተጠቃሚ ፕሮግራም ብቻ ነው። መጠየቂያ አሳይታለች እና የሆነ ነገር እንድትተይብበት ትጠብቃለች። በአብዛኛዎቹ አጋጣሚዎች የፕሮግራም ስም ከጻፉ, ዛጎሉ ቦታውን ያገኛል, የፎርክ () ዘዴን ይደውሉ እና አዲስ ሂደት ለመፍጠር ከኤክሰ () ዓይነቶች አንዱን ይደውሉ እና እስኪጠናቀቅ ይጠብቁ. () ይደውሉ። የሕፃኑ ሂደት ሲያልቅ, ዛጎሉ ከጥበቃ () ጥሪ ይመለሳል እና መጠየቂያውን እንደገና ያትማል እና የሚቀጥለው ትዕዛዝ እስኪገባ ድረስ ይጠብቃል.

የሹካ() እና exec() መለያየት ዛጎሉ የሚከተሉትን ነገሮች እንዲያደርግ ያስችለዋል።
wc ፋይል > new_file።

በዚህ ምሳሌ የwc ፕሮግራሙ ውፅዓት ወደ ፋይል ይዛወራል። ዛጎሉ ይህን የሚያገኝበት መንገድ በጣም ቀላል ነው - ከመደወል በፊት የልጅ ሂደትን በመፍጠር exec(), ቅርፊቱ መደበኛውን ውጤት ይዘጋል እና ፋይሉን ይከፍታል አዲስ_ፋይል, ስለዚህ ሁሉም ከሚቀጥለው አሂድ ፕሮግራም ይወጣል wc ከማያ ገጽ ይልቅ ወደ ፋይል ይዛወራሉ።

የዩኒክስ ቧንቧዎች የቧንቧ () ጥሪን የሚጠቀሙበት ልዩነት, በተመሳሳይ መንገድ ይተገበራሉ. በዚህ ሁኔታ የሂደቱ የውጤት ጅረት በከርነል ውስጥ ከሚገኘው የቧንቧ ወረፋ ጋር ይገናኛል, ይህም የሌላ ሂደት የግቤት ጅረት ይያያዛል.

ምንጭ: hab.com

አስተያየት ያክሉ