我想從父級訪問分叉子進程的退出狀態,但我得到奇怪的答案。有時,我得到256或有時得到一個負數,這取決於我是指定&狀態還是隻是狀態。我知道我非常接近。有人可以給我提供一點幫助,我將如何得到EXIT_STATUSwaitpid錯誤的用法?
這裏是我的代碼
pid_t pid;
int *status;
if((pid = fork()) < 0)
fprintf(stdout, "Error forking child process\n");
else if (pid == 0)
{
execvp(input[0], input);
fprintf(stdout, "Invalid process!!\n");
_exit(EXIT_FAILURE);
}
else
{
while (waitpid(-1, status, 0) != pid);
fprintf(stdout, "The status is %d\n", &status);
}
我做了你所要求的改變。然而,我的狀態值爲256。由於執行execvp失敗,我期待-1。所以我試着將_exit改成_exit(-1)。但現在總是返回65280。 – haunteddevil619
你不能直接解釋'status';只有低8位指的是進程退出代碼。使用'WIFEXITED(status)'確定進程是否乾淨地退出,然後使用'WEXITSTATUS(status)'獲得實際的退出狀態。 (請注意,負退出代碼不被很好的支持;您只能保證8個無符號位用於退出代碼。)請參見[waitpid()手冊頁](http://linux.die.net/man/2/waitpid)有關如何解釋「狀態」的更多細節。 – cdhowie
我沒有得到你說的話,「如果這個過程乾淨地退出」。由於execvp失敗,進程必須以錯誤或(-1)退出。使用WIFEXITED後,我的退出狀態爲255。我認爲我還是不太瞭解這個 – haunteddevil619