Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

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