我用posix_spawnp來執行不同的流程,我檢查狀態(與waitpid函數),以確保孩子正確創建催生孩子狀態退出= 127
int iRet = posix_spawnp(&iPID, zPath, NULL, NULL, argv, environ);
if (iRet != 0)
{
return false;
}
int iState;
waitpid(static_cast<pid_t>(iPID), &iState, WNOHANG);
cout << "Wait: PID " << iPID << " | State " << iState << endl;
if (WIFEXITED(iState)) {
printf("Child exited with RC=%d\n",WEXITSTATUS(iState));
}
else if (WIFSIGNALED(iState)) {
printf("Child exited via signal %d\n",WTERMSIG(iState));
}
else
{
printf("Child is NORMAL");
}
起初,這執行正確,我也得到了以下消息:
等待:PID 15911 |國家0兒童退出 與RC = 0
執行相同的過程幾次之後,孩子過程開始狀態127
等待退出:PID 15947 |州32512兒童 退出,RC = 127
發生這種情況後,我不能讓孩子再次產卵。我在for循環中附上了上面給出的代碼段,但它不會正確產生。 如果我重新啓動父進程,它會工作一段時間,但同樣的問題在一段時間後再次出現。
我在這裏做錯了什麼?
我重新寫使用叉子和execvp獲得錯誤的更明確的把握代碼和事實證明,實際的錯誤信息是: 錯誤號= 14(無效地址) 一些周圍挖透露,這是因爲我沒結束我的參數列表最後一項爲「NULL」。 argv = new char [iSize + 1]; argv [iSize] = NULL; 修復了這個問題。 – Gayan 2009-04-20 03:56:20