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

...

Prosessi

...

luodaan

...

funktiolla

...

pid_t

...

*fork(void);

...


Funktio

...

palauttaa

...

kutsuvalle

...

prosessille

...

lapsiprosessin

...

numeron

...

ja

...

lapsiprosessille

...

0.

...


fork()-kutsun

...

tuloksena

...

syntyy

...

uusi

...

prosessi,

...

joka

...

on

...

'klooni'

...

äitiprosessista.

...

  • yhteinen

...

  • koodi

...

  • samat

...

  • muuttujien

...

  • arvot

...

  • samat

...

  • prosessinkuvaajan

...

  • perustiedot

...

  • yhteiset

...

  • avoimet

...

  • tiedostot

...

Kummallakin

...

on

...

kuitenkin:

...

  • oma

...

  • data-alue

...

  • oma

...

  • prosessinkuvaaja

...

fork()-kutsun

...

jälkeen

...

ei

...

voi

...

olla

...

varma

...

siitä

...

kumpi

...

prosessi

...

(äiti

...

vai

...

lapsi)

...

jatkaa

...

aiemmin

...

suoritustaan.

...

Jos

...

järjestys

...

tärkeää,

...

on

...

ohjelmoitava

...

itse

...

synkronointi

...


Esim

...

1.

{
Code Block
}
#include < sys/types.h >
#include < unistd.h >

int glob = 6;
char buf[] = "teksti stdout virtaan\n";

int main(void)
{
int var=88;
pid_t pid;
if (write(STDOUT_FILENO, buf, sizeof(buf)-1) != sizeof(buf)-1)
perror("kirjoitusvirhe");
printf("ennen fork-funktiota\n");
if ( (pid = fork()) < 0)
perror("fork virhe");
else if (pid == 0)
{ /* lapsiprosessi */ glob++; /* modifioidaan muutujia */ var++; }
else
sleep(2); /* vanhempi */

printf("pid=%d,glob=%d,var=%d\n",getpid(), glob, var);
exit(0);
}


{code}

Lapsiprosessi

...

luodaan,

...

kun:

...

  • halutaan

...

  • suorittaa

...

  • äiti

...

  • -

...

  • ja

...

  • lapsiprosessissa

...

  • erillinen

...

  • osa

...

  • samassa

...

  • tiedostossa

...

  • olevasta

...

  • koodista.

...

  • Esim.

...

  • verkkosovelluksissa

...

  • on

...

  • tavallista,

...

  • että

...

  • palvelija

...

  • luo

...

  • lapsiprosessin

...

  • antamaan

...

  • palvelua

...

  • ja

...

  • jää

...

  • itse

...

  • odottamaan

...

  • uusia

...

  • palvelupyyntöjä.

...

  • halutaan

...

  • suorittaa

...

  • kokonaan

...

  • toinen

...

  • ohjelma.

...

  • Tällöin

...

  • fork()-kutsun

...

  • jälkeen

...

  • on

...

  • lapsiprosessissa

...

  • myös

...

  • exec()-kutsu,

...

  • eli

...

  • se

...

  • vaihtaa

...

  • suoritettavaa

...

  • koodia.

...

  • Esim.

...

  • komentotulkit

...

  • käyttävät

...

  • tätä

...

  • menetelmää.

...


  •       Lapsi perii äidiltä kaikki avoimet tiedostokuvaajat. Sekä äiti että lapsi käyttävät yhteistä avoimet tiedostot taulun alkiota niillä on yhteinen luku / kirjoituspositio.