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

标签 c++ fork process

<分区>

Possible Duplicate:
working of fork in c language

我有一个非常简单的程序,我试图理解 fork() 现在,在我的程序中,fork() 每次遇到 fork() 时都会复制整个程序 或上面的行(作为 parent )?

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

#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

< = fork 调用。

关于c++ - fork() 到底在做什么?在我的 C++ 程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12773711/

相关文章:

C++ - 不需要使用基本方法

c - N命令管道 "Inter-process "

process - 使用调试器记录崩溃的应用程序的命令行

c++ - 在 Linux 中 fork 一个子进程后没有数据

Unix 进程图困惑

Python - 如何获取进程的起始地址/基地址?

c++ - 如何避免 std::abs 产生意外结果?

c++ - 在插入之前检查元素是否存在于 unordered_set 中

c++ - "when use an array"中用途的准确描述是什么

c - 解释为什么 fork 会导致 IF 条件表现不同。