关于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;
}

搞明白这个基本上就可以了。

待补充。。。

  

 

posted on 2020-07-31 11:03  MinskyChu  阅读(86)  评论(0编辑  收藏  举报