Subject: Funkcja fork() / procesy potomne i macierzyste
NIe moge zrozumieć co właściwie dzieje się po uruchomieniu tego programu:
[DAMIAN@DAMIAN ex01_02]$ ./fork.x
+++++++++ 3403
------- 3404
+++++++++ 3404
------- 3405
+++++++++ 3405
------- 3406
+++++++++ 3404
------- 3409
+++++++++ 3403
------- 3410
+++++++++ 3410
------- 3411
+++++++++ 3403
------- 3412
i moje pytanie:
1. Dlaczego są 3 procesy macierzyste 3403 a żadnych potomnych?
2. Dlaczego jest proces potomny 3412 a nie ma procesu macerzystego 3412?
3. I jak narysować drzewo procesów dla tego programu?(to chyb ma tak wyglądać tylko teraz jak za "o" wstawić numery ptocesów??)
o
|__o
| | o
|_____|_______|__o
| o
|_____|___o
|
|____o
|
|
o
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include<sys/wait.h>
int main(int argc, char **argr)
{
int i=0;
for(i=0;i<3;i++){
switch(fork())
{
case -1 : perror("Fork error "); exit(-1);break; //chyba jeżeli funkcja nie ma procesów potomnych
case 0: sleep(1) ;printf("------- %lu \n", getpid());break; //funkcja sleep usypia przypadek case 0 na 1s
// proces potomny
default: printf("+++++++++ %lu \n", getpid());//default jest wykonywany gdy nie zajdzie dopasowanie do żadnego case
//proces macieżyst
wait(NULL); //czekanie na proces potomny
}
}
exit(0);
}
po wykonaniu dostaje:#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include<sys/wait.h>
int main(int argc, char **argr)
{
int i=0;
for(i=0;i<3;i++){
switch(fork())
{
case -1 : perror("Fork error "); exit(-1);break; //chyba jeżeli funkcja nie ma procesów potomnych
case 0: sleep(1) ;printf("------- %lu \n", getpid());break; //funkcja sleep usypia przypadek case 0 na 1s
// proces potomny
default: printf("+++++++++ %lu \n", getpid());//default jest wykonywany gdy nie zajdzie dopasowanie do żadnego case
//proces macieżyst
wait(NULL); //czekanie na proces potomny
}
}
exit(0);
}
[DAMIAN@DAMIAN ex01_02]$ ./fork.x
+++++++++ 3403
------- 3404
+++++++++ 3404
------- 3405
+++++++++ 3405
------- 3406
+++++++++ 3404
------- 3409
+++++++++ 3403
------- 3410
+++++++++ 3410
------- 3411
+++++++++ 3403
------- 3412
i moje pytanie:
1. Dlaczego są 3 procesy macierzyste 3403 a żadnych potomnych?
2. Dlaczego jest proces potomny 3412 a nie ma procesu macerzystego 3412?
3. I jak narysować drzewo procesów dla tego programu?(to chyb ma tak wyglądać tylko teraz jak za "o" wstawić numery ptocesów??)
o
|__o
| | o
|_____|_______|__o
| o
|_____|___o
|
|____o
|
|
o


parsival
Show profile
Link to this post![http://img131.imageshack.us/img131/6453/fedoracoregt6.jpg [Image: http://img131.imageshack.us/img131/6453/fedoracoregt6.jpg]](http://img131.imageshack.us/img131/6453/fedoracoregt6.jpg)
![http://img160.imageshack.us/img160/1940/prisonbreak2id2.gif [Image: http://img160.imageshack.us/img160/1940/prisonbreak2id2.gif]](http://img160.imageshack.us/img160/1940/prisonbreak2id2.gif)