fork() 함수질문입니다.

gag2012의 이미지

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 void main() {
  5
  6   int x, i;
  7
  8   for (i = 0; i<5; i++) {
  9     x = fork();
 10     if (x == 0) {
 11       int k;
 12       for (k = 0; k<10; k++) {
 13         printf("%d-th child running %d-th iteration\n", i, k);
 14         sleep(1);
 15         fflush(stdout);
 16       }
 17     }
 
 18   }
 19
 20   printf("parent exits\n");
 21
 22 }

원래 기존에 17번행과 18번행에 exit(0)으로 자식프로세스를 종료시켰는데

exit(0)을 제거했을 때 몇개의 자식이 생기겠는가라는 질문입니다.

제가 생각했을 때는

처음 부모가 5개의 자식을 만들고,

그 각각의 5개의 자식이 또 다시 5개의 자식을 만들어 25개가

25개가 다시 5개를 만들어 125개가

그렇게 n번 8번 for문을 돌때마다 5의 n승의 자식이 생긴다고 생각이 드는데요.

아닌가요?

답은 따로 가지고 있지않습니다! 부탁드려요.

pynoos의 이미지

9 줄의 fork가 실행될때마다 2개로 나누어지고, 그 두 프로세스가 다시 fork 로 돌아오므로 프로그램 실행 중에는 2의 5승개가 만들어집니다.

i 번째마다 2의 i 승개가 존재하면서 그 중 바로 생긴 차일드에서 10번의 반복문을 출력하는군요.