[英]How many processes are created in this code?
我的教科書中有這個問題,我無法解決這個問題。 問題是:下面的程序代碼中同時運行的最大進程數是多少?
在下面的代碼中沒有對fork()
進行返回值檢查,因此父和子都將執行所有代碼,對吧? 假設在第一個fork()
調用中父進程先等待然后退出,我錯了嗎? 那么一次運行的最大進程數是2? (就在父母退出之前,它做了一個分叉)。
int main()
{
if ( fork() )
wait(0);
else
exit(0);
if ( fork() )
wait(0);
else
{
if ( fork() )
wait(0);
else
{
if ( fork() )
wait(0);
else
exit(0);
}
}
return 0;
}
我認為代碼編寫得非常糟糕,並且很難清楚代碼中實際發生了什么。 我非常感謝有用的答案。
提前致謝。
在下面的代碼中沒有對fork()進行返回值檢查,因此父和子都將執行所有代碼,對吧?
否。如果成功, fork()
將在父進程中返回正數,在子進程中返回0。 那些if (fork())
在父進程中將為true。
假設在第一個fork()調用中父進程先等待然后退出,我錯了嗎?
否。在wait()
返回后,該父級將繼續在下一個if (fork())
,子級將退出。
那么一次運行的最大進程數是2?
不是。正確答案是4。
從fork(2)手冊頁 :
成功時,子進程的PID在父進程中返回,並在子進程中返回0。 失敗時,在父項中返回-1,不創建子進程,並正確設置errno。
所以這些條件就像這樣(假設fork成功):
if ( fork() )
{
// parent, fork() returned the (nonzero) PID of the child process
}
else
// child, fork() returned 0
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.