fork解析

从windows过来,对fork早有耳闻,但是想理解,还是有点难度。

 

找来一些文章和示例代码:

http://www.wangchao.net.cn/bbsdetail_71709.html  推荐,代码还算清晰,结论明确

http://hi.baidu.com/connor/blog/item/4874d20925faa18ad1581b3d.html  有点乱,需要自己整理思路

 

整理一下思路:

0,fork是UNIX/linux中创建子进程的系统调用。

1,pid=fork(),是“一次调用两次返回”,分别给父进程和子进程返回结果,但是结果不同。

2,一个进程,主要包含三个元素:

o. 一个可以执行的程序;

o. 和该进程相关联的全部数据(包括变量,内存空间,缓冲区等等);

o. 程序的执行上下文(execution context);

新进程和原有进程的可执行程序是同一个程序,共享代码空间;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!这样:复制的代价比windows的复制进程代价药效;父进程的所有信息都有效的传给了子进程,而不需要像window一样传递参数,且所有数据保持一致。

3,上面最后一句话的“保持一致”是错误的,因为fork()返回的pid不一样:父进程中的pid的值是其新创建的子进程的进程id,子进程中的这个值是0。除此以为,“保持一致”是正确的。

4,新进程创建之后,从fork()的返回点开始运行,而不是从程序的最初开始运行。

4.1插一小句。wait()是等待子进程结束而进行的等待。Wait()函数的作用是挂起本进程以等待子进程的结束,子进程结束时返回。父进程创建多个子进程且已有某子进程退出时,父进程中wait()函数在第一个子进程结束时返回。

5,fork()做的是父进程的复制,注意是复制,而不是共享。就是说,父进程的信息“几乎”都给了子进程,而子进程进行的任何修改(当然是局部于进程而不是系统级别的)都不会在反应到父进程中了。

6,fork之后父子进程除非采用了同步手段,否则不能确定谁先运行,也不能确定谁先结束。认为子进程结束后父进程才从fork返回的,这是不对的,fork不是这样的,vfork才这样。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值