Wiki Markup |
---|
Prosessin suoritus päättyy normaalisti, kun suoritetaan: |
...
* funktiossa main() funktio return(status) |
...
* funktio exit(status) |
...
tai * funktio \_exit(status) |
...
exit() kutsuu funktiolla atexit() rekisteröityjä funktioita ja purkaa stdio:n puskurit (vrt. funktio flush()). \_exit() hoitelee Unix-spesifiset lopputoimet Prosessin suoritus voi päättyä myös 'epänormaalisti', kun kutsutaan funktiota abort() tai prosessi saa signaalin, johon se ei varautunut tai ei voi varautua. Epänormaaleissa päättymisissä generoi ydin paluuarvon. |
...
Unix-spesifisiin lopputoimiin kuuluu tiedostojen sulkeminen, muistitilan vapauttaminen sekä äitiprosessin signalointi, mutta prosessinkuvaaja jää vielä olemaan ("zombie"). Koska paluuarvon välittäminen äitiprosessille ja laskutustietojen kokoaminen on vielä kesken. |
...
Jos äitiprosessi on päättynyt ennen lapsiprosessia, merkitsee ydin zombien äidiksi prosessin 1 (init). Se kokoaa laskutustiedot ja vapauttaa prosessinkuvaajan. |
...
Kun prosessi päättyy, saa äiti aina signaalin SIGCHLD. Oletusarvo on, että äiti ei välitä tästä signaalista. Äiti voi pysähtyä odottamaan lapsen päättymistä funktioon wait() tai waitpid(): |
...
{code |
} #include < sys/types.h > #include < sys/wait.h > pid_t wait(int *status);pid_t waitpid(pid_t pid, int *status, int options); {code} Palauttaa: päättyneen prosessin pid, |
...
parametrissa statloc on päättyneen lapsen status |
...
Jos lapsiprosessi on jo päättynyt, pääsee äitiprosessi heti jatkamaan. Funktiolla waitpid() voi määrätä odotettavaksi jonkin tietyn prosessin päättymistä, kun taas funktiolla wait() odotetaan minkä tahansa lapsen päättymistä. |
...
* pid == \-1 odota mitä tahansa lapsiprosessia * pid > 0 odota lasta, jolla ko. pid * pid == 0 odota mitä tahansa äidin kanssa samaan prosessiryhmän kuuluvaa lasta * pid < \-1 odota prosessiryhmään \|pid\| kuuluvaa prosessia |