문제

다음 C 프로그램의 결과를 알려야합니다.

main()
{
    int pid, k, som;
    som = 0; k = 2;
    pid = fork();
    if(pid == 0)
        k=5;
    else
        wait(0);
    for(int i = 1; i <= k; i++)
        som += i;
    printf("%d", som);
}

첫 번째 기대는 3입니다. 포크 호출이 이루어지면 프로세스의 기억이 복사되고 두 프로그램이 모두 실행됩니다. 아동 프로세스는 실행되지만 K는 여전히 2와 같습니다. 따라서 마지막에는 1 + 2 = 3을 실행합니다.

그러나이 프로그램이 실행되면 153을 출력합니다. 왜 가장 가까운 단서가 없었는지 그 이유는 무엇입니까?

누구든지 왜 그런지 말할 수 있습니까?

도움이 되었습니까?

해결책

그 이유는 동일한 콘솔로 인쇄되는 2 개의 프로세스가있는 이유입니다. "Fork"는 Unix/Linux 명령으로 한 번 호출되어 두 번 돌아옵니다. 반품 중 하나는 포크를 불렀던 원래 과정에 있으며 스폰 된 아동 프로세스의 PID를 반환합니다. 두 번째 반품은 0이고 이것은 자식 과정임을 나타냅니다.

프로그램 중 하나 인 내가 믿는 어린이는 먼저 실행하고 15를 값으로 계산하고 마지막으로 콘솔에 인쇄합니다. 부모 프로그램은 대기 (0)로 인해 두 번째로 실행되고 값 3을 생성합니다.

다른 팁

15 어린이에 의해 인쇄됩니다 3 부모에 의해.

A는 부모이고 B는 자녀입니다. 여기에 중요한 줄은 다음과 같습니다.

A: pid = fork(); // returns 0 for the child process
A: wait(0);
B: k = 5;
B: for(int i = 1; i <= k; i++) som += i; // som = 15
B: printf("%d", som); // prints 15, B finishes, goes back to A
A: for(int i = 1; i <= k; i++) som += i; // som = 3
A: printf("%d", som); // prints 3

값 사이에 Newline이 인쇄되지 않으므로 자녀의 답변 직후에 부모의 대답이 나타납니다.

Jared는 값의 원인에 대해 정확합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top