我是一名新的 C++ 程序员,我正在尝试弄清楚父进程和进程是如何工作的。为此,我尝试根据此处的代码创建三个进程。但是,我知道我们应该在每次创建子进程后退出以允许其他子进程,但我不明白在第二个 for 循环中,我们等待(NULL)三次。我们为什么要这样做呢?这是我第一次尝试了解父进程和子进程。如果您也给我一个学习资源,我会很高兴。谢谢!
int main(){
cout<<" Dad process is "<<getpid()<<endl;
for(int i=0;i<3;i++){
if(fork()==0)
{
cout<<"Son pid "<<getpid()<<" from pid "<<getppid()<<endl;
exit(0);
}
}
for(int i=0;i<3;i++){
wait(NULL);
}
}
`
最佳答案
如果没有 wait()
调用,父进程将立即终止,而子进程可能会继续运行。
对于像这里所示的这样简短的程序,这并不重要。
但是对于更大、更复杂的应用程序,子进程执行大量工作:让父进程终止会令人困惑。它给人的印象是刚刚执行的流程已经完成了工作。您回到命令/shell 提示符,但没有立即意识到子进程仍在执行它们正在执行的操作。
此外,如果其中一个子进程遇到错误并以非零退出代码终止,则 wait()
父进程可以收集退出代码,并以非零退出代码终止自身。 - 零退出代码,表明进程失败。
关于c++ - 为什么我们在创建子进程时要使用wait?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40282990/