重複の可能性:
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()に達すると、プログラム全体がコピーされますか?)