Let's assume that there is a process with PID = 1
and it runs the following code:
int a = fork();
int b = fork();
printf(“a: %d, b: %d\n”, a, b);
Let's further assume that new PID
s will be given one by one, so the second given PID
will be 2
, then 3
etc.
A possible output is:
a:2, b:3
a:2, b:0
a:0, b:4
a:0, b:0
I'm having some troubles trying to understand the output of the above code, e especially why a:0, b:4
and a:2, b:3
.
You know that
The return value is the zero in the child and the process-id number of the child in the parent, or -1 upon error.
So, let's see step by step what's happening here.
When fork()
is called, it creates a new child with id n
, then returns in the child 0
and in the parent n
.
So let's suppose our process as pid 1
, when the first fork()
is called it creates a process with pid 2
, then returns to a a value. a
will have value 0
in the process 2
(the child), and will have value 2
in process 1
(the parent).
Then each process will call fork()
and assign the return value to b
in the parent process. In the child, b
will have value 0
.
Anyway, I think this schema will simplify the comprehension:
The main starts:
|
|
int a = fork(); // It creates a new process, and the old one continues going
|
|-------------------------|
a = 2; /* Parent */ a = 0; // Child
| |
| |
int b = fork(); int b = fork(); // Each one create a new process
| |
| |-----------------------------|
| /* Child -> Parent */ // Child -> Child
| a = 0; b = 4; a = 0; b = 0
|
|
|
|
|-----------------------------|
/* Parent -> Parent */ // Parent -> Child
a = 2; b = 3; a = 2, b = 0;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With