我有一个非常简单的程序,我试图理解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()时,整个程序被复制了?)
答案 0 :(得分: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
<
=拨打电话。