這是我更新的代碼段fork調用不執行代碼孩子
for (int i=0; i<30; i++){
printf("Forking\n");
tmpPid = fork();
switch(tmpPid)
{
case -1:
printf("Error");
break;
case 0:
printf("Fork success for proc %d\n", i);
//call some function
_exit(0)
break;
default:
printf("Fork succeed");
//store the pid in a vector
break;
}
}
//iterate through the vector and wait on each process.
// waitpid(vectorList[i], &exitStatus, WNOHANG)
分叉的幾乎15-18子進程正常工作。但是對於某些進程,子代碼根本不被執行,子進程只是掛起。 (我,E叉()只返回子ID,但不是零)。 如果我通過調用其他虛擬函數在for循環中購買更多時間,則不會看到此問題。 誰能告訴我最新的問題?是否有必要延遲多叉?
謝謝
該錯誤代碼未顯示,很可能是您在'case 0'中調用的函數(例如,如果它不調用'_exit',那可能是您的問題)。給我們一個完整的,可編譯的,自包含的例子來證明問題。 –
如果'some function'中的代碼返回,那麼這不是一個[fork bomb](http://en.wikipedia.org/wiki/Fork_bomb)? – unwind
我忘了在這裏提到_exit(0)。它在我的實際代碼中。仍然有1或2個進程沒有命中子代碼,但父進程被執行。 –