可能的重复:
用 c 语言处理 fork
我有一个非常简单的程序,我正在尝试理解 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() 时,整个程序都被复制了?)