2011-04-27 32 views
1

我使用fork和execv來執行子進程。在父程序中,我有:如何從子進程讀取返回碼

int status; 
wait(&status); 
cout << "return code = " << status << endl; 

是否等待子進程終止並顯示它的返回碼?

+0

到目前爲止,所有的答案都是錯誤的,因爲甚至沒有提到WEXITSTATUS。 – 2011-04-27 06:44:11

+0

請注意,退出狀態被編碼爲16位值的高位8位,並且該信號被編碼爲低位8位。如果進程沒有死信號,那麼低位是零;如果它死了一個信號,那麼高位是零。有關官方POSIX定義,請參見['wait()'和'waitpid()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html);它沒有提到8位組,但提供宏來獲取狀態和信號信息。 – 2011-04-27 06:52:05

回答

0

是的,它應該從我讀http://linux.die.net/man/2/wait

+1

'wait(&status)'相當於'waitpid(-1,&status,0)',它將等待任何子進程。因此,只要只有一個子進程,代碼將按預期工作 – mdec 2011-04-27 06:09:37

1

您應該使用waitpid()如果想獲得指定的子進程的狀態。 wait()將返回第一個完成的子進程的狀態。

+0

[This](http://linux.die.net/man/2/wait)聲稱不然。 – mdec 2011-04-27 06:05:55

+1

尼斯編輯,將撤銷downvote :) – mdec 2011-04-27 06:17:09

+0

謝謝@mdec :) – 2011-04-27 06:18:39