Ero sivun ”Fork()” versioiden välillä
Siirry navigaatioon
Siirry hakuun
fork nimenomainen tapa, jolla uusia prosesseja luodaan unixeissa
p (→Demostraatio) |
LP (keskustelu | muokkaukset) (fork nimenomainen tapa, jolla uusia prosesseja luodaan unixeissa) |
||
Rivi 1: | Rivi 1: | ||
Fork on SVr4, 4.3BSD ja POSIX.1-2001 -standardienmukainen funktio [[C]]:ssä, jolla luodaan ohjelmalle kutsun suorituskohtaan lapsiprosessi vastaavassa tilassa. Funktion esittely löytyy unistd.h-otsikkotiedostosta. | Fork on SVr4, 4.3BSD ja POSIX.1-2001 -standardienmukainen funktio [[C]]:ssä, jolla luodaan ohjelmalle kutsun suorituskohtaan lapsiprosessi vastaavassa tilassa. Funktion esittely löytyy unistd.h-otsikkotiedostosta. | ||
==Määritelmä== | ==Määritelmä== | ||
pid_t fork() | pid_t fork() | ||
===Paluuarvo=== | ===Paluuarvo=== | ||
Palautusarvo (tyyppiä pid_t) on -1 virheen tapahtuessa, muuten se vastaa lapsiprosessin [[pid|prosessitunnusta]]. Lapsiprosessille palautusarvo näkyy nollana (0x0). | Palautusarvo (tyyppiä pid_t) on -1 virheen tapahtuessa, muuten se vastaa lapsiprosessin [[pid|prosessitunnusta]]. Lapsiprosessille palautusarvo näkyy nollana (0x0). | ||
==Käyttö== | ==Käyttö== | ||
Fork on se tapa, jolla uusia prosesseja luodaan unixeissa. Jos lapsiprosessin pitää suorittaa toista ohjelmaa, se käyttää [[exec]]-kutsua forkin ja mahdollisten siivoustoimien jälkeen. Vaikka prosessin kopioiminen ennen kopion korvaamista toisella saattaa tuntua resurssien haaskaukselta, se ei sitä ole: lapsiprosessin muistiavaruus osoittaa samaa fyysistä muistia, kunnes lapsiprosessi kirjoittaa siihen, eikä käyttämätöntä muistia siis tarvitse kopioida ("Copy-on-Write"). | |||
Fork-kutsun lisäksi on olemassa [[clone]]-kutsu, jolla voi tarkemmin määritellä mitkä resurssit jäävät prosessien yhteisiksi. Tällä kutsulla luodaan [[säie|säikeet]]. | |||
=== Demostraatio === | === Demostraatio === | ||
Luodaan seuraavanlainen C-ohjelma: | Luodaan seuraavanlainen C-ohjelma: |