...
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 Block |
---|
} #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