Ero sivun ”Fork()” versioiden välillä
Siirry navigaatioon
Siirry hakuun
→Taustaprosessin luominen: ISO C90 kieltää esittelyjen ja koodin sekoittamisen
(→Esimerkki: source tagit) |
(→Taustaprosessin luominen: ISO C90 kieltää esittelyjen ja koodin sekoittamisen) |
||
(2 välissä olevaa versiota 2 käyttäjän tekeminä ei näytetä) | |||
Rivi 2: | Rivi 2: | ||
==Prototyyppi== | ==Prototyyppi== | ||
pid_t fork() | pid_t fork() | ||
===Paluuarvo=== | ===Paluuarvo=== | ||
Rivi 17: | Rivi 17: | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <unistd.h> | #include <unistd.h> | ||
#include <sys/types.h> | |||
int main() { | int main() { | ||
pid_t pid; | |||
printf("Luodaan taustaprosessi\n"); | printf("Luodaan taustaprosessi\n"); | ||
pid = fork(); | |||
if (pid==0) /* Lapsiprosessille pid näkyy nollana */ | if (pid==0) /* Lapsiprosessille pid näkyy nollana */ | ||
printf("Olen lapsiprosessi\n"); | printf("Olen lapsiprosessi\n"); | ||
Rivi 42: | Rivi 44: | ||
===[[demoni|Taustaprosessin]] luominen=== | ===[[demoni|Taustaprosessin]] luominen=== | ||
fork-funktion ajavan ohjelman toinen osa jää taustalle ja alkuperäinen ohjelma voidaan sammuttaa. Esimerkkikoodi: | fork-funktion ajavan ohjelman toinen osa jää taustalle ja alkuperäinen ohjelma voidaan sammuttaa. Esimerkkikoodi: | ||
< | <source lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <unistd.h> | #include <unistd.h> | ||
#include <sys/types.h> | |||
int main() { | int main() { | ||
pid_t pid; | |||
printf("Luodaan taustaprosessi\n"); | printf("Luodaan taustaprosessi\n"); | ||
pid = fork(); | |||
if (pid > 0) return 0; /* Isäntäprosessi loppuu */ | if (pid > 0) return 0; /* Isäntäprosessi loppuu */ | ||
Rivi 56: | Rivi 60: | ||
return 0; | return 0; | ||
} | } | ||
</ | </source> | ||
Tallennetaan koodi tiedostoon <tt>taustaprosessi.c</tt>, käännetään se komennolla <tt>gcc taustaprosessi.c -o taustaprosessi</tt> ja ajetaan se (<tt>./taustaprosessi</tt>). Tuloste on seuraavanlainen: | Tallennetaan koodi tiedostoon <tt>taustaprosessi.c</tt>, käännetään se komennolla <tt>gcc taustaprosessi.c -o taustaprosessi</tt> ja ajetaan se (<tt>./taustaprosessi</tt>). Tuloste on seuraavanlainen: | ||
$ ./taustaprosessi | $ ./taustaprosessi |