首页 > 系统服务 > 详细

linux fork 函数目的

时间:2014-04-02 09:15:57      阅读:651      评论:0      收藏:0      [点我收藏+]

fork 函数透析

简单的使用fork函数也许是再简单不过吧!

开始思考,fork函数到底有什么作用,何时使用这个函数呢?这是我将透析fork的原因。

 

fork函数基本知识

fork函数的基本知识,将不会是本文讨论的重点。

 

写实拷贝页实现,说白了就是子进程和父进程共享数据,只有在需要的时候,才会去copy 操作。

fork 函数使用目的

本人思考:只要是需要处理多个独立任务的应用程序都应该用到fork来新建完全独立的进程来执行任务。

说白点就是在一个程序中启动另一个程序

当你要创建一个子进程的时候就用fork()函数,它一般有两种应用,

第一,创建一个子进程用来执行和父进程不同的代码段,这个在网络中应用比较广,比如服务器端fork一个子进程用来等待客户端的请求,当请求到来时,子进程响应这个请求,而父进程则继续等待客户端请求的到来;

第二,创建一个子进程用来执行和父进程不同的程序,这种应用往往 fork一个子进程之后立即调用exec族函数,exec族函数则调用新的程序来代替新创建的子进程。

 

说明;


fork一般用于实现并发操作,在网络编程中用的很多(主要用来实现并发服务器)。

服务器进程一般执行函数的流程是socket()->bind()->listen()->accept(),此后端口即进入阻塞状态,如客户端调用connect后,经tcp三路握手建立连接。

如果是迭代服务器的话,一般在listen()后接着一个for(;bubuko.com,布布扣语句,把accept放在里面,只有在完成一个服务后才能为下一个用户提供服务,如:
listen();
for(;bubuko.com,布布扣
{
  connfd=accept();
  service()...;
  close(connfd);
}

当操作比较耗时时,考虑实行并发服务,这时的for变为:
for(;bubuko.com,布布扣 
{ 
  connfd=accept();
  if ((pid=fork()) == 0) 
  {
    close(listenfd);
    service() .... ;
    close connfd;
    exit(0)
  } 
  close(connfd);
}

 

 

vfork 函数

对fork函数有了理解,vfork 应该也是同理!

linux fork 函数目的,布布扣,bubuko.com

linux fork 函数目的

原文:http://blog.csdn.net/u010236550/article/details/22734839

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!