2012-04-15 2 views
2

시스템 프로그래밍 시스템 호출에 대해 공부하고 있습니다. 내 과제물에 코드 블록이 있습니다 (아래 명시). 이 질문은 얼마나 많은 A, B 또는 C가 인쇄 될지를 묻습니다. 제 질문은 if(pid == 0)의 의미는 무엇입니까? 나는 if(pid == 0)이 거짓임을 의미하므로 2 x A와 2 x B가 인쇄 될 것이라고 분석합니다. 나는 쓸까? 두 번째 질문은 pid2 = fork()이 메인을 다시 실행합니까?시스템 프로그래밍 - Fork() 메소드

int main() 
{ 
    int pid,pid2; 
    int i; 
    pid = fork(); 
    printf("A\n"); 
    if (pid == 0) 
    pid2=fork(); 
    if (pid2) 
    printf("B\n"); 
    printf("C\n"); 
    return 0; 
} 
+0

PID == 0은 현재 프로세스가 자식을 의미 main() 실행하지 않는다. – Aslan986

+1

@ Aslan986 - 당신은 그 아이를 의미하지 않습니까? –

+0

물론, 죄송합니다. – Aslan986

답변

6

fork 시스템 호출은 특별합니다. 한 번 호출하면 은 두 번을 반환합니다. 한 번은 아이에, 한 번은 부모에게.

부모에서는 자식의 PID를 반환하고 자식에서는 0을 반환합니다. 따라서 if (pid == 0)은 자식 인 경우 ""을 의미합니다.

3

fork 반환 자식 프로세스에 0 및 부모 프로세스에 아이의 PID. man 페이지는 다른 모든 것을 지워야합니다.

2

포크 반환이 개 값 :

  • 자식 프로세스에서 0과 부모 프로세스에서 양의 값.
  • fork() 호출 후 2 개의 프로세스가 있습니다 (오류가 발생하지 않는 경우 -1이 반환됩니다). 당신의 예에서

, 당신은 현재 당신 였는지를하다 따라 다른 값을 반환 그가 포크 호출의 값을 반환 3 개 프로세스와 의지 출력 2A, 1B 및 3C

0

을 만들 수 있습니다.

의 당신이 몇 가지 코드가 부모 프로세스에서 실행하고 싶은 말은하자 당신 것 우레탄이이 조건 블록의 코드의 일부 :

p = fork(); 
if (p > 0) 
{ 
    // We're the parent process 
} 

그리고 당신은 자식 프로세스의 일부 코드를 실행하려는 경우

나머지 부분 (프로세스와 하위 프로세스 모두 부모에 의해 실행 됨)이 else 블록에 적용됩니다.

1

pid2은 부모 프로세스의 경우 초기화되지 않습니다. B의 인쇄 양이 정의되지 않은 동작입니다.

pid=fork()

다시, 희망 ...

+0

초기화되는 pid2에 대한 주석이 중요합니다! – DrP3pp3r

관련 문제