[C언어] 프로세스 코드 질문드립니다.

조회수 512회
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>

int main(void)
{
    pid_t pid;
    int i;
    for (i=0;i<3;i++){
        pid=fork();
        if (pid==-1){
            printf("Fork Error.\n");
        } else if (pid==0) {
            printf("I am child");
        }
    }

    if (pid!=0){
        while ((pid=waitpid(-1, NULL, 0))>0)
            if(errno==ECHILD)
                break;
            printf("I am parent \n");
    }
    exit(0);
    return 0;
}

위의 코드를 실행해보면 I am child가 7개, I am parent가 4개 출력됩니다. 그 이유는, 처음(i=0)에는 프로세스1 하나만 있습니다. 프로세스1이 for문 안으로 들어와 fork()를 실행하면 프로세스2가 만들어지고, 이제 프로세스1은 I am child를 출력합니다. 프로세스1과 프로세스2가 for문을 두 번째로 돌 때(i=1일 때) fork()를 실행해 각각 프로세스3과 프로세스 4를 만들고, 각각 한번씩 I am child를 출력합니다. 이런식으로 해서 i=2일 때는 4번 I am child를 출력하여 총 7번(1+2+4) 출력됩니다.

근데 I am parent가 4번 출력되는 이유는 무엇인가요?

그리고 실행할 때마다 각각의 문장이 출력되는 순서가 다른데 이유가 무엇인가요? (자세히 설명해주시면 감사하겠습니다.)

또 I am child가 3개, I am parent and all children have exited가 1개 나오게 하려면 (코드를 1줄만 추가한다면) printf("I am child"); 다음에 break;나 exit(0); 중에 어느 것을 추가해도 상관없나요? (2줄 이상은 안된다고 문제집에 나와서요)

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)