Vanhempi prosessi

Pääprosessi on tietojenkäsittelytieteessä prosessi , joka on luonut ("syntynyt") yhden tai useamman aliprosessin ("lapsiprosessit"). Tämän vuoksi prosessista voi tulla lapsi tai vanhempi ja päinvastoin. Siten käyttöjärjestelmien linkitysmekanismien avulla voidaan muodostaa kokonaisia ​​toisiinsa liittyvien prosessien hierarkioita [1] [2] [3] .

Tällaisten hierarkioiden luomisen ominaisuuksista voidaan myös todeta, että aliprosesseja luotaessa osa emoprosessin ominaisuuksista voidaan siirtää, ja kun ohjaussignaaleja siirretään pääprosessille, signaaleja voidaan siirtää "emoprosessista". ""lapsille". Esimerkkinä voisi olla mikä tahansa moderni selain , jossa jokainen yksittäinen välilehti luodaan erillisessä lapsiselainprosessissa, ja jos lähetät selaimelle lopetussignaalin, kaikki sen välilehdet lakkaavat toimimasta.

Unix-tyyppiset järjestelmät

Unixin kaltaisissa käyttöjärjestelmissä kaikki prosessit paitsi prosessi 0 (swapperi) luodaan, kun toinen prosessi antaa haarukkajärjestelmäkutsun . Prosessi, joka kutsui forkia, on pääprosessi, ja äskettäin luotu prosessi on aliprosessi. Jokaisella prosessilla (paitsi prosessilla 0) on yksi pääprosessi, mutta sillä voi olla useita aliprosesseja.

Käyttöjärjestelmän ydin tunnistaa jokaisen prosessin sen prosessitunnuksella . Prosessi 0 on erityinen prosessi, joka luodaan järjestelmän käynnistyessä ja aliprosessin (prosessi 1) muodostamisen jälkeen prosessista 0 tulee " vaihtoprosessi " (tunnetaan myös nimellä "swapper process" ja " idle task "). Prosessi 1, joka tunnetaan nimellä init , on järjestelmän kaikkien muiden prosessien pääesi-isä.

Linux

Linux-ytimessä , jossa POSIX -prosessien ja säikeiden välillä on hyvin hienovarainen ero , on kahdenlaisia ​​emoprosesseja, nimittäin "todellinen emo" ja "emo". Vanhempi on prosessi, joka vastaanottaa SIGCHLD -signaalin , kun lapsi lopettaa, kun taas todellinen vanhempi on säie, joka todella loi aliprosessin monisäikeisessä ympäristössä. Normaalissa prosessissa nämä kaksi arvoa ovat samat, mutta prosessina toimivalle POSIX-säikeelle nämä kaksi arvoa voivat olla erilaisia.

Zombie käsittelee

Käyttöjärjestelmä ylläpitää taulukkoa, joka liittää jokaisen prosessin sen prosessitunnuksella (yleisesti nimeltään "PID" - "Process Identifier") sen toimintaan tarvittaviin tietoihin. Prosessin elinkaaren aikana tällaiset tiedot voivat sisältää prosessille määritetyt muistisegmentit, argumentit , joilla se kutsuttiin, ympäristömuuttujat , resurssien käyttölaskurit, käyttäjätunnukset , ryhmätunnukset, ryhmäjoukot mahdollisesti muun tyyppisiä tietoja.

Kun prosessi lopettaa suorituksensa joko kutsumalla poistumisfunktiota (vaikka implisiittisesti, suorittamalla paluukomennon pääfunktiosta) tai vastaanottamalla signaalin, joka saa sen äkillisesti lopettamaan, käyttöjärjestelmä vapauttaa suurimman osan resursseista ja tiedoista. liittyy tähän prosessiin. , mutta säilyttää silti resurssien käyttö- ja poistumistilakoodin, koska pääprosessi saattaa olla kiinnostunut tietämään, onnistuiko kyseinen aliprosessi (käyttäen poistumistilakoodin dekoodaamiseen vakiotoimintoja) ja järjestelmäresurssien määrän, joka se kulutti suorituksensa aikana.

Oletuksena järjestelmä olettaa, että vanhempi prosessi on todella kiinnostunut sellaisista tiedoista, kun lapsi lopettaa, ja lähettää siten emoprosessille SIGCHLD -signaalin varoittaakseen, että lapsesta on kerättävä tietoja. Tämä keräys tehdään kutsumalla odotusperheen funktio (joko odota itse , tai kuten waitpid , waitid tai wait4 ). Kun tämä keräys on tehty, järjestelmä vapauttaa nämä viimeiset tiedot aliprosessista ja poistaa sen PID:n prosessitaulukosta. Jos vanhempi prosessi kuitenkin viivästyy (tai ei tee sitä ollenkaan) lapsen tietojen keräämisessä, järjestelmällä ei ole muuta vaihtoehtoa kuin tallentaa lapsen PID- ja lopetustiedot prosessitaulukkoon loputtomiin.

Tällaista lopetettua prosessia, jonka tietoja ei ole kerätty, kutsutaan zombiprosessiksi tai yksinkertaisesti zombiksi UNIX -kielellä . Nimi on leikkisä analogia, koska lopetettua prosessia pidetään "ei enää elossa" tai "kuolleena", koska se on todellakin lakannut toimimasta eikä voi "kuolea".

Zombie-prosessit voivat aiheuttaa ongelmia järjestelmissä, joissa on rajalliset resurssit tai rajoitetun kokoiset prosessitaulukot, koska uusien aktiivisten prosessien luominen voidaan estää zombiprosessien varaamien resurssien puutteella.

Orpoprosessit

Orpoprosessi on zombieprosessin vastakohta, mikä viittaa tapaukseen, jossa emoprosessi poistuu ennen kuin sen aliprosessien sanotaan olevan "orpoja". Toisin kuin asynkroninen lapsilta vanhemmille -ilmoitus, joka tapahtuu, kun aliprosessi päättyy (SIGCHLD-signaalin kautta), aliprosesseille ei ilmoiteta ajoissa, kun heidän emoprosessinsa on lopetettu. Sen sijaan järjestelmä yksinkertaisesti määrittelee uudelleen lapsiprosessidatan "emo-PID"-kentän prosessiksi, joka on "esi-isä" jokaiselle järjestelmän prosessille, jonka PID on yleensä "1" ja jonka nimi on perinteisesti "init" ( Linux-ydintä lukuun ottamatta). versio 3.4 ja uudemmat). Tämä tarkoittaa, että init "omaksuu" jokaisen järjestelmän orpoprosessin, jos se menettää emonsa.

Linux 3.4 -ytimen jälkeen näin ei enää ole, itse asiassa prosessit voivat antaa prctl -järjestelmäkutsun vaihtoehdolla PR_SET_CHILD_SUBREAPER, ja sen seurauksena heistä, ei prosessista numero 1, tulee minkä tahansa orvolapsensa vanhempi. prosessit. Tällä tavalla nykyaikaiset palvelupäälliköt ja demonien ohjausapuohjelmat toimivat , mukaan lukien systemd , upstart ja nosh Service Manager.

Katso myös

Lapsiprosessi

Muistiinpanot

  1. Tanenbaum E. S. , Bos H. . Luku 1 Prosessit ja säikeet // Nykyaikaiset käyttöjärjestelmät = Modern Operating Systems . - 4. painos - Pietari. : Peter , 2015. - S. 64-65. - 1120 s. ISBN 978-5-4461-1155-8 .
  2. Johnson Hart . Luku 6. Prosessinhallinta // Järjestelmäohjelmointi Windows-ympäristössä = Windows System Programming . - 3. painos - M .: Williams, 2005. - 592 s. ISBN 5-8459-0879-5 .
  3. Robachevsky A. M. , Nemnyugin S. A. , Stesik O. L .. Luku 1. Työskentely UNIX-käyttöjärjestelmässä // UNIX-käyttöjärjestelmä . - 2. painos - Pietari. : BHV-Petersburg, 2010. - S. 46-53. — 656 s. - ISBN 978-5-94157-538-1 .

Linkit