Fork Value Example
Fork Value Example
21. x += 15;
22. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
1. #include<stdio.h>
2. #include<unistd.h>
3. int main() MAIN
Lines 5,13 to22
4. { int x = 0;
X=0
5. if( fork() ) x += 5;
6. else if( !fork() )
7. {
A
Lines 6 to22
X=0
8. x += 10;
9. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
10. exit(0);
11. }
12. else x -= 2;
13. if( fork() ) x += 5;
14. else if( !fork() )
15. {
16. x += 10;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
18. exit(0);
19. }
20. else x -= 2;
21. x += 15;
22. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
1. #include<stdio.h>
2. #include<unistd.h> Process MAIN
3. int main() MAIN
4. { int x = 0;
X=0
5. if( fork() ) x += 5;
6. if( fork() ) x += 5;
7. else if( !fork() )
A
X=0
8. {
9. x += 10;
10. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
11. exit(0);
12. }
13. else x -= 2;
14. x += 15;
15. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
16. while( wait(NULL) != -1);
17. return 0;
18. }
1. else if( !fork() )
2. { Process A
3. x += 10; MAIN
4.
X=0
printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A
X=0
8. if( fork() ) x += 5;
9. else if( !fork() )
10. {
11. x += 10;
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
13. exit(0);
14. }
15. else x -= 2;
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
18. while( wait(NULL) != -1);
19. return 0;
20. }
1. #include<stdio.h>
2. #include<unistd.h> Process MAIN
3. int main() MAIN
4. { int x = 0;
X=0 +5
5. if( fork() ) x += 5;
6. if( fork() ) x += 5;
7. else if( !fork() )
A
X=0
8. {
9. x += 10;
10. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
11. exit(0);
12. }
13. else x -= 2;
14. x += 15;
15. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
16. while( wait(NULL) != -1);
17. return 0;
18. }
1. #include<stdio.h>
2. #include<unistd.h> Process MAIN
3. int main() MAIN
Lines 6, 14,15
4. { int x = 0;
X=0 +5
5. if( fork() ) x += 5; Lines 7 to15
6. if( fork() ) x += 5;
7. else if( !fork() )
A B
X=0 X=5
8. {
9. x += 10;
10. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
11. exit(0);
12. }
13. else x -= 2;
14. x += 15;
15. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
16. while( wait(NULL) != -1);
17. return 0;
18. }
1. #include<stdio.h>
2. #include<unistd.h> Process MAIN
3. int main() MAIN
Lines 6, 14,15
4. { int x = 0;
X=0 +5+5
5. if( fork() ) x += 5; Lines 7 to15
6. if( fork() ) x += 5;
7. else if( !fork() )
A B
X=0 X=5
8. {
9. x += 10;
10. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
11. exit(0);
12. }
13. else x -= 2;
14. x += 15;
15. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
16. while( wait(NULL) != -1);
17. return 0;
18. }
1. #include<stdio.h>
2. #include<unistd.h> Process MAIN
3. int main() MAIN
Lines 6, 14,15
4. { int x = 0;
X=0 +5+5+15
5. if( fork() ) x += 5; Lines 7 to15
6. if( fork() ) x += 5;
7. else if( !fork() )
A B
X=0 X=5
8. {
9. x += 10;
10. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
11. exit(0);
12. }
13. else x -= 2;
14. x += 15;
15. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
16. while( wait(NULL) != -1);
17. return 0;
18. }
1. #include<stdio.h>
2. #include<unistd.h> Process B
3. int main() MAIN
4. { int x = 0;
X=0 +5+5+15
5. if( fork() ) x += 5; Lines 7,13 to15
6. if( fork() ) x += 5;
7. else if( !fork() )
A B
X=0 X=5
8. {
9. x += 10;
10. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
11. exit(0); C
12. } X=5
13. else x -= 2; Lines 9 to11
14. x += 15;
15. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
16. while( wait(NULL) != -1);
17. return 0;
18. }
1. #include<stdio.h>
2. #include<unistd.h> Process B
3. int main() MAIN
4. { int x = 0;
X=0 +5+5+15
5. if( fork() ) x += 5; Lines 7,13 to15
6. if( fork() ) x += 5;
7. else if( !fork() )
A B
X=0 X=5-2
8. {
9. x += 10;
10. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
11. exit(0); C
12. } X=5
13. else x -= 2; Lines 9 to11
14. x += 15;
15. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
16. while( wait(NULL) != -1);
17. return 0;
18. }
1. #include<stdio.h>
2. #include<unistd.h> Process B
3. int main() MAIN
4. { int x = 0;
X=0 +5+5+15
5. if( fork() ) x += 5; Lines 7,13 to15
6. if( fork() ) x += 5;
7. else if( !fork() )
A B
X=0 X=5-2+15
8. {
9. x += 10;
10. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
11. exit(0); C
12. } X=5
13. else x -= 2; Lines 9 to11
14. x += 15;
15. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
16. while( wait(NULL) != -1);
17. return 0;
18. }
1. #include<stdio.h>
2. #include<unistd.h> Process C
3. int main() MAIN
4. { int x = 0;
X=0 +5+5+15
5. if( fork() ) x += 5;
6. if( fork() ) x += 5;
7. else if( !fork() )
A B
X=0 X=5-2+15
8. {
9. x += 10;
10. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
11. exit(0); C
12. } X=5+10
13. else x -= 2; Lines 9 to11
14. x += 15;
15. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
16. while( wait(NULL) != -1);
17. return 0;
18. }
1. #include<stdio.h>
2. #include<unistd.h> Process C
3. int main() MAIN
4. { int x = 0;
X=0 +5+5+15
5. if( fork() ) x += 5;
6. if( fork() ) x += 5;
7. else if( !fork() )
A B
X=0 X=5-2+15
8. {
9. x += 10;
10. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
11. exit(0); C
12. } X=5+10
13. else x -= 2; X
Lines 9 to11
14. x += 15;
15. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
16. while( wait(NULL) != -1);
17. return 0;
18. }
1. else if( !fork() )
2. { Process A
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
X=0 X=18
8. if( fork() ) x += 5;
9. else if( !fork() )
10. {
11. x += 10; C
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0); X
14. }
15. else x -= 2;
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
18. while( wait(NULL) != -1);
19. return 0;
20. }
1. else if( !fork() )
2. { Process A
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
Lines 7 to 17 X=0 X=18
8. if( fork() ) x += 5;
9. else if( !fork() )
10. { D
11. x += 10; Lines 3,4,5 C
X=0
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0); X
14. }
15. else x -= 2;
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
18. while( wait(NULL) != -1);
19. return 0;
20. }
1. else if( !fork() )
2. { Process A
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
Lines 7 to 17 X=0-2 X=18
8. if( fork() ) x += 5;
9. else if( !fork() )
10. { D
11. x += 10; Lines 3,4,5 C
X=0
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0); X
14. }
15. else x -= 2;
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
18. while( wait(NULL) != -1);
19. return 0;
20. }
1. else if( !fork() )
Process A
2. {
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
Lines 8,16,17 X=0-2 X=18
8. if( fork() ) x += 5;
9. else if( !fork() )
10. { D
11. x += 10; Lines 3,4,5 C
X=0
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0); X
14. } E
Lines 9 to 17
15. else x -= 2; X=-2
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
18. while( wait(NULL) != -1);
19. return 0;
20. }
1. else if( !fork() )
2. { Process A
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
Lines 8,16,17 X=0-2+5 X=18
8. if( fork() ) x += 5;
9. else if( !fork() )
10. { D
11. x += 10; Lines 3,4,5 C
X=0
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0); X
14. } E
Lines 9 to 17
15. else x -= 2; X=-2
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
18. while( wait(NULL) != -1);
19. return 0;
20. }
1. else if( !fork() )
2. { Process A
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
8. if( fork() ) x += 5;
Lines 8 ,16, 17 X=0-2+5+15 X=18
9. else if( !fork() )
10. { D
11. x += 10; Lines 3,4,5 C
X=0
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0); X
14. } E
Lines 9 to 17
15. else x -= 2; X=-2
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
18. while( wait(NULL) != -1);
19. return 0;
20. }
1. else if( !fork() )
2. { Process D
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
X=0-2+5+15 X=18
8. if( fork() ) x += 5;
9. else if( !fork() )
10. { D
11. x += 10; Lines 3,4,5 C
X=0+10
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0); X
14. } E
Lines 9 to 17
15. else x -= 2; X=-2
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
18. while( wait(NULL) != -1);
19. return 0;
20. }
1. else if( !fork() )
2. { Process D
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
X=0-2+5+15 X=18
8. if( fork() ) x += 5;
9. else if( !fork() )
10. { D
11. x += 10; Lines 3,4,5 C
X=0+10
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0);
X X
14. } E
Lines 9 to 17
15. else x -= 2; X=-2
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
18. while( wait(NULL) != -1);
19. return 0;
20. }
1. else if( !fork() )
2. { Process E
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
X=0-2+5+15 X=18
8. if( fork() ) x += 5;
9. else if( !fork() )
10. { D
11. x += 10; X=0+10 C
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0);
X X
14. } E
Lines 15 to 17
15. else x -= 2; X=-2
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
F
18. while( wait(NULL) != -1);
X=-2
19. return 0;
20. }
Lines 11,12,13
1. else if( !fork() )
2. { Process E
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
X=0-2+5+15 X=18
8. if( fork() ) x += 5;
9. else if( !fork() )
10. { D
11. x += 10; X=0+10 C
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0);
X X
14. } E
Lines 15 to 17
15. else x -= 2; X=-2-2
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
F
18. while( wait(NULL) != -1);
X=-2
19. return 0;
20. }
Lines 11,12,13
1. else if( !fork() )
2. { Process E
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
X=0-2+5+15 X=18
8. if( fork() ) x += 5;
9. else if( !fork() )
10. { D
11. x += 10; X=0+10 C
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0);
X X
14. } E
Lines 15 to 17
15. else x -= 2; X=-2-2+15
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
F
18. while( wait(NULL) != -1);
X=-2
19. return 0;
20. }
Lines 11,12,13
1. else if( !fork() )
2. { Process F
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
X=0-2+5+15 X=18
8. if( fork() ) x += 5;
9. else if( !fork() )
10. { D
11. x += 10; X=0+10 C
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0);
X X
14. } E
15. else x -= 2; X=-2-2+15
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
F
18. while( wait(NULL) != -1);
X=-2+10
19. return 0;
20. }
Lines 11,12,13
1. else if( !fork() )
2. { Process F
MAIN
3. x += 10; X=25
4. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
5. exit(0);
6. }
7. else x -= 2;
A B
X=0-2+5+15 X=18
8. if( fork() ) x += 5;
9. else if( !fork() )
10. { D
11. x += 10; X=0+10 C
12. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=15
13. exit(0);
X X
14. } E
15. else x -= 2; X=-2-2+15
16. x += 15;
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x);
F
18. while( wait(NULL) != -1);
X=-2+10
19. return 0;
X
20. }
Lines 11,12,13
1. #include<stdio.h>
2. #include<unistd.h> MAIN
3. int main() X=25
4. { int x = 0;
5. for(int i=0; i<2; i++)
6. { A B
7. if( fork() ) x += 5; X=18 X=18
8. else if( !fork() )
9. { D
X=10 C
10. x += 10;
X=15
11. printf("PID = %d\t PPID = %d\t X = %d\n",
X getpid(), getppid(), x);
X
12. exit(0);
E
13. }
X=11
14. else x -= 2;
15. }
16. x += 15;
F
17. printf("PID = %d\t PPID = %d\t X = %d\n", getpid(), getppid(), x); X=8
18. while( wait(NULL) != -1); X
19. return 0;
20. }