0

重複の可能性:
c言語でのフォークの動作

私は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()に達すると、プログラム全体がコピーされますか?)

4

1 に答える 1

6
              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 呼び出し。

于 2012-10-07T23:32:23.553 に答える