关于fork()的那些事儿
一、fork()
1、fork()函数通过系统调用创建一个与原来进程一个近乎相同的进程。新进程为子进程,原进程为父进程。
2、是Linix下创建一个新进程的唯一方法。
二、特点
1、函数调用一次,返回两次,父进程的返回是子进程的pid,子进程 的返回是0。因为进程的子进程可以多于一个,没有函数使一个进程可以获得其所有子进程的进程id。对子进程来说,之所以fork返回0给它,是因为它随时可以调用getpid()来获取自己的pid。子进程可以调用getppid()来获取父进程的id。
2、fork(0示成功,父进程返回错误。
3、子进程是父进程的一个拷贝,操作系统会复制一个与父进程完全相同的子进程,这两个进程共享代码空间,数据空间是互相独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针也完全相同,子进程拥有父进程当前运行到的位置。
4、fork()之后,两个进程可以做同样的工作,也可以传入不一样的参数,做不同的工作。
5、运行的序列与系统的调试有关。
6、子进程与原进程计数器pc值相同,也就是说,子进程是从fork返回处开始执行的。
三、例子
for(int i = 0;i<2;i++) { int pid = fork(); cout<<"pid:"<<pid<<":from:"<<getpid()<<" i = "<<i<<endl; }
搞明白这个基本上就可以了。
待补充。。。