2012-04-02 4 views
0
... 
int main(void) 
{ 
    int i; 
    for(i=0;i<2;i++){ 
     switch(fork()){ 
     case 0: 
      sleep(1); 
      break; 
     default: 
      sleep(1); 
     } 
    } 
    while(i--) wait(NULL); 
    return 0; 
} 

안녕하세요. 나는 프로세스와 포크를 이해하려고 노력하고있다.이 프로그램은 몇 개의 프로세스를 생성합니까?

이 코드 스 니펫이 얼마나 많은 프로세스를 생성하는지 모르겠습니다.

1 주 프로그램의 경우 주 프로그램이 자체적으로 복제 (하위 프로세스가 만들어 짐) 된 다음 자식이 자신을 복제합니다 (자식 2 개와 주 프로세스).

이렇게 세 가지 프로세스가 있습니다.

내가 맞는지 또는 무엇인가 놓치고 있습니까?

+3

이 숙제입니까? – littleadv

+0

시험 문제였습니다. – Tool

+0

'break'는 루프가 아닌 ** 스위치 **에서 벗어납니다. 그게 당신이 이해하지 못하는 것입니까? –

답변

2

fork()을 두 번 (-> t1.1, t1.2) 호출 할 메인 스레드 (t1)에 for 루프가 있습니다. 첫 번째 forked-thread (t1.1)에는 하나 더 반복이 있으므로 다른 것을 생성합니다 (-> t1.1.1). t1.2도 t1.1.1도 더 이상 반복이 없으므로 더 이상 스레드가 분기되지 않습니다.

이렇게하면 4 개의 스레드가 남습니다.

1

스위치의 두 경우의 동작이 동일하다는 점에 유의하십시오. sleep (1) 다음 루프에서 계속하십시오. 당신의 솔루션은 두 가지 행동이 다르게 (하나는 자식을 만들었고 다른 하나는 그렇지 않음), 당신이 뭔가를 놓치고 있다고 말할 수 있습니다.

관련 문제