2011-04-27 61 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