c++ - 为什么我们在创建子进程时要使用wait?

标签 c++ process fork parent multitasking

我是一名新的 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/

相关文章:

c++ - 使用 C++ 从 MySQL 数据库获取字符串时编码错误

linux - Linux bash脚本中父进程和子进程的关系

c# - 在单独的进程中运行代码

c - UNIX 中的 Fork() 创建的进程是一致运行还是顺序运行?

c - 为什么这个使用 fork 和共享内存的 C 程序的输出是这样的?

c++ - 静态库和项目中的相同文件

c++ - 不能将 cout 与 MPI 一起使用

c++ - Fast Delegate (et al) 背后的想法是否已用于优化 std::function?

c - 程序的行为就像等待一个角色

c - 使用 fork() 和 exec() 在 C 中执行命令行管道