察看wait()的失败
问题描述:
为了知道是否等待()工作过,会是正确的,以检查它像下面?从理论上讲,如果等待()不会失败,应该返回到父进程结束的孩子PID,否则父PID为1,对不对?察看wait()的失败
switch (process = fork())
{
case -1:
// Fork fail
perror("Fork failed");
exit(EXIT_FAILURE);
case 0:
//Child process
HERE CODE DOES SOMETHING
exit(EXIT_SUCCESS);
default:
//Parent process
pid=wait(&status);
if(pid==1){
perror("Wait failed");
}else{
exit(EXIT_SUCCESS);
}
}
答
引用
返回值
等待():成功,则返回终止子的进程ID; 上 错误,则返回-1。
所以要检查是否wait(2)
失败,这已经足够了:
if (wait(&status) == -1) {
perror("wait failed");
exit(1);
}
+0
更好地利用这个http://man7.org/linux/man-pages/man2/waitpid.2.html以供参考。它更准确,更新,更少。 – alk
阅读函数的文档主要是帮助:http://man7.org/linux/man-pages/man2/waitpid.2 html的 – alk
除此之外'wait'返回-1,而不是1的错误,这是包含在现有的答案的情况下,可以考虑使用'waitpid',以确保您正在等待你只是派生的过程,而不是事实第一个子进程发生退出(可能会被分离出来,或者被另一个线程分离)。此外,这是一个好主意,调用'_exit',而不是'exit',以防止子进程继承了父母的stdip缓冲区无意冲洗。 – user4815162342
@ user4815162342谢谢。 – krm