Iinkqubo zokuSebenza: Iziqwenga eziNtathu eziLula. Icandelo 3: Inkqubo ye-API (inguqulelo)

Intshayelelo kwiiNkqubo zokuSebenza

Hayi Habr! Ndingathanda ukuzisa ingqalelo yakho uluhlu lwamanqaku-iinguqulelo zoncwadi olulodwa olunomdla ngombono wam - i-OSTEP. Esi sixhobo sixoxa nzulu ngomsebenzi weenkqubo zokusebenza ezifana ne-unix, ezizezi, ukusebenza kunye neenkqubo, abacwangcisi abahlukeneyo, imemori, kunye namanye amacandelo afanayo enza i-OS yanamhlanje. Ungayibona imvelaphi yazo zonke izixhobo apha apha. Nceda uqaphele ukuba uguqulelo lwenziwe ngokungenamsebenzi (ngokukhululekileyo kakhulu), kodwa ndiyathemba ukuba ndiyigcinile intsingiselo ngokubanzi.

Umsebenzi waseLebhu ngalo mbandela unokufumaneka apha:

Amanye amalungu:

Ungajonga kwakhona itshaneli yam ku yocingo =)

Ialarm! Kukho ilebhu yale ntetho! Jonga github

Inkqubo API

Makhe sijonge kumzekelo wokudala inkqubo kwinkqubo yeUNIX. Kwenzeka ngeefowuni ezimbini zenkqubo ifolokhwe () ΠΈ exec ().

Fowuna ngefolokhwe()

Iinkqubo zokuSebenza: Iziqwenga eziNtathu eziLula. Icandelo 3: Inkqubo ye-API (inguqulelo)

Cinga ngenkqubo eyenza ifolokhwe () umnxeba. Isiphumo sokwenziwa kwayo siya kuba ngolu hlobo lulandelayo.

Iinkqubo zokuSebenza: Iziqwenga eziNtathu eziLula. Icandelo 3: Inkqubo ye-API (inguqulelo)

Okokuqala, sifaka umsebenzi oyintloko () kwaye uprinte umtya kwisikrini. Umgca uqulathe isichongi senkqubo esibizwa ngokuba sisiqalo PID okanye inkqubo yokuchonga. Esi sichongi sisetyenziswa kwi UNIX ukubhekisa kwinkqubo. Umyalelo olandelayo uyakubiza ifolokhwe (). Kweli nqanaba, ikopi ephantse ibe yinyani yenkqubo yenziwe. Kwi-OS, kubonakala ngathi kukho iikopi ezi-2 zenkqubo efanayo esebenza kwindlela, ethi yona iphume kwifolokhwe () umsebenzi. Inkqubo entsha eyenziwe yomntwana (ngokunxulumene nenkqubo yomzali eyileyo) ayisayi kuphunyezwa, iqala kumsebenzi ongundoqo (). Kufuneka kukhunjulwe ukuba inkqubo yomntwana ayiyona ikopi echanekileyo yenkqubo yomzali ngokukodwa, inendawo yayo yedilesi, iirejista zayo, isalathisi sayo kwimiyalelo ephunyezwayo, kunye nokunye okunjalo. Ngaloo ndlela, ixabiso elibuyiselwe kumnxeba wefolokhwe () umsebenzi uya kwahluka. Ngokukodwa, inkqubo yomzali iya kufumana ixabiso le-PID lenkqubo yomntwana njengembuyekezo, kwaye umntwana uya kufumana ixabiso elilingana no-0. Ukusebenzisa ezi khowudi zokubuyisela, unokwahlula iinkqubo kwaye unyanzelise ngamnye ukuba enze umsebenzi wakhe. . Nangona kunjalo, ukuphunyezwa kwale nkqubo akuchazwanga ngokungqongqo. Emva kokwahlula kwiinkqubo ezi-2, i-OS iqala ukuwabeka esweni, kunye nokucwangcisa umsebenzi wabo. Ukuba iphunyeziwe kwiprosesa eyodwa-core, enye yeenkqubo, kulo mzekelo umzali, uya kuqhubeka esebenza, kwaye inkqubo yomntwana iya kufumana ulawulo. Xa uqala kwakhona, imeko inokwahluka.

Ukulinda umnxeba ()

Iinkqubo zokuSebenza: Iziqwenga eziNtathu eziLula. Icandelo 3: Inkqubo ye-API (inguqulelo)

Qwalasela olu cwangciso lulandelayo. Kule nkqubo, ngenxa yobukho bomnxeba Yima() Inkqubo yomzali iya kuhlala ilindele ukuba inkqubo yomntwana igqitywe. Kule meko, siya kufumana imveliso yombhalo echazwe ngokungqongqo kwiscreen

Iinkqubo zokuSebenza: Iziqwenga eziNtathu eziLula. Icandelo 3: Inkqubo ye-API (inguqulelo)

exec() umnxeba

Iinkqubo zokuSebenza: Iziqwenga eziNtathu eziLula. Icandelo 3: Inkqubo ye-API (inguqulelo)

Khawucinge ngocelomngeni exec (). Le ndlela yokufowuna iluncedo xa sifuna ukuqhuba inkqubo eyahluke ngokupheleleyo. Apha siza kubiza execvp () ukwenza inkqubo ye-wc eludweliso lwenkqubo lokubala amagama. Kwenzeka ntoni xa kubizwa exec()? Lo mnxeba ugqithiselwe igama lefayile ephunyezwayo kunye nezinye iiparamitha njengeengxoxo. Emva koko ikhowudi kunye nedatha engatshintshiyo evela kule fayile ephunyezwayo ilayishwa kwaye icandelo layo kunye nekhowudi libhalwe ngaphezulu. Iindawo ezishiyekileyo zememori, ezifana ne-stack kunye nemfumba, ziphinda ziqaliswe. Emva koko i-OS yenza ngokulula inkqubo, igqithise iseti yeengxoxo. Ke akhange senze inkqubo entsha, siguqule inkqubo eqhubayo ngoku ukuya kwenye inkqubo esebenzayo. Emva kokuphumeza i exec() umnxeba kumzukulwana, kubonakala ngathi udweliso lwenkqubo loqobo aluqhubanga kwaphela.

Le ngxaki yokuqalisa iqhelekile ngokupheleleyo kwiqokobhe le Unix, kwaye ivumela elo qokobhe ukuba liphumeze ikhowudi emva kokufowuna ifolokhwe (), kodwa ngaphambi kokufowuna exec (). Umzekelo wekhowudi enjalo iya kuhlengahlengisa imeko-bume yeqokobhe kwiimfuno zenkqubo eqalwayo, phambi kokuyisungula.

Shell - inkqubo yomsebenzisi nje. Ukubonisa umgca wesimemo kwaye ulindele ukuba ubhale into kuwo. Kwiimeko ezininzi, ukuba ubhala igama lenkqubo apho, iqokobhe liya kufumana indawo yalo, biza ifolokhwe () indlela, kwaye emva koko ufowunele udidi oluthile lwe exec () ukwenza inkqubo entsha kwaye uyilindele ukuba igqibe usebenzisa wait() umnxeba. Xa inkqubo yomntwana iphuma, iqokobhe liya kubuya kwifowuni yokulinda () kwaye uprinte ukwaziswa kwakhona kwaye ulinde umyalelo olandelayo ukuba ungeniswe.

Ifolokhwe () & exec() ukwahlula ivumela iqokobhe ukwenza ezi zinto zilandelayo, umzekelo:
wc ifayile > entsha_ifayile.

Kulo mzekelo, imveliso yenkqubo ye-wc iqondiswe kwakhona kwifayile. Indlela iqokobhe elifikelela ngayo oku ilula kakhulu-ngokwenza inkqubo yomntwana phambi kokufowuna exec (), iqokobhe livala imveliso eqhelekileyo kwaye ivula ifayile entsha_ifayile, ngoko, zonke iziphumo ezivela kudweliso lwenkqubo oluqhubela phambili wc izakuthunyelwa kwifayile endaweni yekhusi.

Unix umbhobho ziphunyezwa ngendlela efanayo, ngomahluko ukuba basebenzisa umbhobho () umnxeba. Kule meko, umgca wokuphuma kwenkqubo uya kudibaniswa kumgca wombhobho obekwe kwi-kernel, apho igalelo lokufaka enye inkqubo liya kudibaniswa.

umthombo: www.habr.com

Yongeza izimvo