2014-04-19 6 views
0

vfork()로 프로그램을 작성하고 parent가 n 개의 자식을 만들고 매개 변수가있는 아들 수를 삽입하고 싶습니다. 그리고 나는 예를 들어 아들의 수를 합계를 :vfork()로 자식 수 합계

./sum 4 
The sum of the child: 10 
The sum of the parent: 10 

(1 + 2 + 3 + 4)

이 내가 와서 작은 코드입니다,하지만 난 무한 루프를 얻을.

int n = atoi(argv[1]); 
int i = 1; 
pid_t pid; 
int sumchild = 0; 
int sumparent = 0; 

    while(i <= n){ 
     pid = vfork(); 
     if(pid == 0){ 
      sumchild = sumchild + i;   
     } 

     i++; 
    } 
    printf("The sum of the child: %i ", sumchild); 

    sumparent = (1 + n) * (n/2); 
    printf("The sum of the parent: %i \n", sumparent); 

난 당신이 fork()처럼 wait()을 필요로하지 않는다는 것을 들었지만, 내가 여기에 무한 루프를 얻는 이유를 모르겠어요.

vfork()은 어떻게 사용해야합니까? 코드를 올바르게 작성했거나 실수를 했습니까?

답변

1

다음 코드하는

pid = vfork(); 
    if(pid == 0){ 
     sumchild = sumchild + i; 

vfork에있어서, 정의되지 않은 동작이 발생할 것이다

vfork를() 함수가 포크와 마찬가지의 효과 (2), 동작이 정의되지 것을 제외하고 있습니다 vfork()에 의해 생성 된 프로세스가 vfork()의 ​​반환 값을 저장하는 데 사용되는 pid_t 유형의 변수 이외의 데이터를 수정하거나 vfork()가 호출 된 함수에서 반환하거나 성공적으로 완료되기 전에 다른 함수를 호출하는 경우 _exit (2) 또는 exec (3) 계열 중 하나를 호출합니다.