2012-09-18 8 views
0

간단한 다운로더에서 작업하면 배열에 파일 항목이 다운로드됩니다.하위 프로세스 포크

현재 배열의 첫 번째 항목을 다운로드하지만 for 루프가 다음 항목을 다운로드 할 때 이미 다운로드 한 항목과 동일하게 유지됩니다.

의미는 다음 항목으로 증가하지 않지만 필요한 시간 동안 실행된다는 것을 의미합니다.

즉 다운로드 할 항목이 2 개이면 첫 번째 항목을 두 번 다운로드합니다.

나는 내가 포크 (fork) 프로세스 잘못하고 있어요 보라, 또는 카운터가 for 루프에서 리셋을 받고있다

// Begin the downloading process 
pid_t child = 0; 
child = fork(); 
wait(); 
if (child < 0) 
{ 
    cout << "Process Failed to Fork" <<endl; 
    return 1; 
} 
if (child == 0) 
    { 
     wait(); 
    } 
else 
{ 

    for(int i = 0; i < numberOfDownloads; i++) 
    { 
    child = fork(); 
    wait(); 
    execl("/usr/bin/wget", "wget",locations[i], NULL); 
    } 
} 
+0

그리고 프로그램은 실제로 다운로더가 아니며 단지'wget'을 둘러싼 래퍼입니다. libcurl (HTTP 클라이언트 처리 용 라이브러리)을 사용하여 조사해야합니다. –

+0

C++에서 std :: async를 사용할 수 있습니다. 11 – balki

답변

0

문제입니다 당신의 for 루프 부모 대 자식을 고려하지 않고 포크, 두 아이 부모는 execl()을 i == 0으로 수행하십시오. 이전에 코드에서 사용한 것과 같은 방식으로 fork()의 반환을 토대로 액션을 래핑해야합니다.

else 
{ 
    for(int i = 0; i < numberOfDownloads; i++) 
    { 
     child = fork(); 
     if (child > 0) execl("/usr/bin/wget", "wget",locations[i], NULL); 
    } 

    /* call wait() for each of your children here, if you wish to wait */ 
} 
+0

감사합니다. 내 문제였습니다. – user1050632