[英]forking child processes
使用一個簡單的下載器,它將以陣列形式下載文件項。
當前它將下載數組中的第一項,但是當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);
}
}
問題是您的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 */
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.