fork() 到底在做什么?在我的C++程序中

what is fork() really doing? in my C++ program

本文关键字:我的 C++ 程序 什么 fork      更新时间:2023-10-16

可能的重复项:
在 C 语言中分叉的工作

有一个非常简单的程序,我正在尝试理解fork()现在,在我的程序中是 fork() 每次遇到 fork() 时复制整个程序还是上面的一行(作为父级)?

我得到了奇怪的结果,这使得它更难理解。

#include <iostream>
#include <unistd.h>
using namespace std;
int main()                  
{                       
cout << "Ha! " << endl;         
fork();                     
cout << "Ho! " << endl;         
fork();                 
cout << "He! " << endl;         
}       

输出:

apple.seed@wint:~$ ./program1
Ha! 
Ho! 
He! 
Ho! 
He! 
apple.seed@wint:~$ He! 
He! 

在 fork() 点,操作系统将创建一个与父进程完全相同的新进程(无论可能是什么?这意味着之前讨论的所有状态都被复制,包括打开的文件、寄存器状态和所有内存分配,其中包括程序代码。(所以当程序到达fork()时,整个程序被复制了?

              He!     <-- original
             /
        Ho! <
       /     
      /       He!     <-- forked from original's second fork call
     /
Ha! <          
     
             He!     <-- forked from origin's first fork call
            /
        He! <
                 
              He!     <-- forked from the first fork 
              ^
              |
              +----------- after second forks

< = 分叉调用。