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; /\* external variable in initialized data \*/
char buf\[\] = "ateksti writestdout to stdoutvirtaan\n";

int
 main(void)
{
int var; /\* automatic variable on the stack \*/=88;
pid_t pid;
var = 88;
if (write(STDOUT_FILENO, buf, sizeof(buf)-1) \!= sizeof(buf)-1)
perror("write errorkirjoitusvirhe");
printf("beforeennen fork-funktiota\n"); /\* we don't flush stdout \*/
if ( (pid = fork()) < 0)
perror("fork errorvirhe");
else if (pid == 0)
{ /\* childlapsiprosessi \*/ glob++; /\* modifymodifioidaan variablesmuutujia \*/ var++; }
else
sleep(2); /\* parentvanhempi \*/

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


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.