分叉子进程

时间:2012-09-18 19:10:59

标签: c++ linux fork

使用简单的下载程序,它将下载数组中的文件项。

目前它将下载数组中的第一项,但是当for循环下载下一项时,它似乎与已经下载的项目保持一致。

意味着它没有递增到下一个项目,但它确实运行了它应该的次数。

即。要下载的2个项目,它将两次下载第一个项目。

我相信我正在进行错误的分叉过程,或者计数器在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);  
    }
}

1 个答案:

答案 0 :(得分:0)

问题是你的for循环分叉而没有考虑子项与父项,而子项和父项都使用i == 0执行execl()。您需要根据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 */
}