Szülői folyamat

A szülőfolyamat a számítástechnikában olyan folyamat , amely egy vagy több utódfolyamatot ("gyermekfolyamatot") hozott létre ("szpotált"). Ennek köszönhetően a folyamat gyermeké vagy szülővé válhat, és fordítva. Így az operációs rendszerekben található összekapcsolási mechanizmusok segítségével a kapcsolódó folyamatok teljes hierarchiái alakíthatók ki [1] [2] [3] .

Az ilyen hierarchiák létrehozásának sajátosságaiból az is megjegyezhető, hogy a gyermekfolyamatok létrehozásakor a szülőfolyamat egyes tulajdonságai átvihetők, a vezérlőjelek szülőfolyamatnak történő átadásakor pedig a „szülőfolyamat”-ból is átvihetők a jelek. ” a „gyerekeknek”. Példa erre bármely modern böngésző , amelyben minden egyes lap külön gyermekböngészési folyamatban jön létre, és ha leállási jelet küld a böngészőnek, akkor az összes lapja is leáll.

Unix-szerű rendszerek

Unix-szerű operációs rendszereken a 0 - s folyamat (swapper) kivételével minden folyamat létrejön, amikor egy másik folyamat kiadja a fork rendszerhívást . A fork-ot hívó folyamat a szülőfolyamat, az újonnan létrehozott folyamat pedig a gyermekfolyamat. Minden folyamatnak (a 0. folyamat kivételével) van egy szülőfolyamat, de több utódfolyamat is lehet.

Az operációs rendszer kernelje minden folyamatot a folyamatazonosítójuk alapján azonosít . A 0. folyamat egy speciális folyamat, amely a rendszer indításakor jön létre, miután egy gyermekfolyamat (1. folyamat) elágazódik, a 0. folyamat „cserefolyamat” lesz ( más néven „cserefolyamat” és „ tétlen feladat ”). Az 1. folyamat, az init néven ismert, a rendszer összes többi folyamatának fő elődje.

Linux

A Linux kernelben , ahol nagyon finom különbségek vannak a POSIX folyamatok és szálak között, kétféle szülőfolyamat létezik, nevezetesen a "valódi szülő" és a "szülő". A szülő az a folyamat, amely megkapja a SIGCHLD jelet , amikor a gyermek befejeződik, míg a valódi szülő az a szál, amely valójában létrehozta a gyermekfolyamatot egy többszálú környezetben. Normál folyamat esetén ez a két érték megegyezik, de egy folyamatként működő POSIX szálnál ez a két érték eltérhet.

Zombi folyamatok

Az operációs rendszer fenntart egy táblát, amely az egyes folyamatokat folyamatazonosítójukkal (általános nevén "PID" - "folyamatazonosító") társítja a működéséhez szükséges adatokkal. A folyamat élettartama során az ilyen adatok magukban foglalhatják a folyamathoz rendelt memóriaszegmenseket , az argumentumokat , amelyekkel meghívták, környezeti változókat , erőforrás-használati számlálókat, felhasználói azonosítót , csoportazonosítót, csoportkészletet esetleg más típusú információkat.

Amikor egy folyamat befejezi a végrehajtását, akár a kilépési függvény meghívásával (akár implicit módon is, hogy a fő függvényből egy return parancsot hajt végre), vagy egy olyan jel fogadásával, amely a folyamat hirtelen leállását okozza, az operációs rendszer felszabadítja az erőforrások és információk nagy részét. , de továbbra is megtartja az erőforrás-használati és kilépési állapotkódot, mert a szülőfolyamat érdekelheti, hogy az utódfolyamat sikeres volt-e (a kilépési állapot kódjának dekódolásához a szabványos függvények segítségével), valamint a rendszererőforrások mennyisége, amely végrehajtása során fogyasztott.

Alapértelmezés szerint a rendszer azt feltételezi, hogy a szülő folyamat valóban érdeklődik az ilyen információk iránt, amikor a gyermek befejeződik, és így SIGCHLD jelet küld a szülő folyamatnak, hogy figyelmeztesse, hogy a gyermekről van néhány adat, amelyet össze kell gyűjteni. Ez a gyűjtés a várakozási család függvényének meghívásával történik (vagy maga a wait , vagy például a waitpid , a waitid vagy a wait4 ). Ha ez a gyűjtés befejeződött, a rendszer kiadja az utolsó információ biteket a gyermekfolyamatról, és eltávolítja a PID-jét a folyamattáblából. Ha azonban a szülői folyamat késlekedik (vagy egyáltalán nem teszi meg) a gyermek adatainak begyűjtését, a rendszernek nincs más választása, mint a gyermek PID és befejezési adatait korlátlan ideig a folyamattáblában tárolni.

Az ilyen leállított folyamatokat, amelyek adatait nem gyűjtötték össze, zombi folyamatnak, vagy UNIX nyelven egyszerűen zombinak nevezik . Az elnevezés játékos hasonlat egy befejezett folyamat „már nem élő”-nek vagy „halottnak” való felfogása miatt, mert valóban megszűnt működni, és nem tud „meghalni”.

A zombi folyamatok problémákat okozhatnak a korlátozott erőforrásokkal rendelkező rendszereken vagy a korlátozott méretű folyamattáblákon, mivel új aktív folyamatok létrejöttét megakadályozhatja a zombi folyamatok által még lefoglalt erőforrások hiánya.

Árva folyamatok

Az árva folyamat a zombi folyamat ellentéte, arra az esetre utal, amikor egy szülő folyamat kilép, mielőtt az utódfolyamatait "árvának" mondanák. Ellentétben az aszinkron gyermek-szülő értesítéssel, amely akkor jelentkezik, amikor az utódfolyamat leáll (a SIGCHLD jelen keresztül), a gyermekfolyamatok nem kapnak időben értesítést, amikor a szülőfolyamat megszűnt. Ehelyett a rendszer egyszerűen újradefiniálja a „szülő PID” mezőt az utód folyamatadatokban egy olyan folyamatra, amely a rendszer minden más folyamatának „őse”, amelynek PID általában „1”, neve pedig hagyományosan „init” ( a Linux kernel kivételével). 3.4 és újabb verzió). Ez azt jelenti, hogy az init minden árva folyamatot "adoptizál" a rendszerben, ha az elveszíti a szülőjét.

A Linux 3.4-es kernel után ez már nem így van, sőt, a processzek kiadhatják a prctl rendszerhívást az opcióval PR_SET_CHILD_SUBREAPER, és ennek eredményeként nem az 1-es számú processz, hanem ők lesznek a szülője bármelyik árva gyermeküknek. folyamatokat. Így működnek a modern szolgáltatáskezelők és démonvezérlő segédprogramok , beleértve a systemd , upstart és nosh szolgáltatáskezelőt.

Lásd még

Gyermek folyamat

Jegyzetek

  1. Tanenbaum E. S. , Bos H .. 1. fejezet Folyamatok és szálak // Modern operációs rendszerek = Modern operációs rendszerek . - 4. kiadás - Szentpétervár. : Péter , 2015. - S. 64-65. - 1120 p. ISBN 978-5-4461-1155-8 .
  2. Johnson Hart . 6. fejezet Folyamatkezelés // Rendszerprogramozás a Windows környezetben = Windows rendszerprogramozás . - 3. kiadás M .: Williams, 2005. — 592 p. ISBN 5-8459-0879-5 .
  3. Robachevsky A. M. , Nemnyugin S. A. , Stesik O. L. . 1. fejezet Munka UNIX operációs rendszerben // A UNIX operációs rendszer . - 2. kiadás - Szentpétervár. : BHV-Petersburg, 2010. - S. 46-53. — 656 p. - ISBN 978-5-94157-538-1 .

Linkek