fork函数的详解

 

转自:http://blog.sina.com.cn/s/blog_69ecdd440100t0mh.html

 

1.调用一次,返回两次。

 

2.子进程中fork返回0,父进程中fork返回子进程的PID。原因是:①在子进程中通过调用getppid可以方便的指导父进程的PID;②没有一个函数可以使父进程获得其所有子进程的PID。(所以在fork返回时,将子进程的PID直接返回给父进程)

注:子进程的ID不可能为0,因为PID0的进程是swapper进程。

 

3.父、子进程共享正文段,不共享数据、堆、栈段,子进程获得父进程数据、堆、栈段的副本。

注:目前,大多数实现并直接复制父进程的数据、堆栈段,而是使用写时复制(Copy-On-Write)技术,在修改这块内存区域时,才会为被修改的数据创建副本。

 

4.子进程会获得缓冲区的副本,即fork前进程缓冲区中的数据未被flush掉,则fork后,子进程能够获得父进程缓冲区中的数据。

 

5.父进程所有被打开的文件描述符都会被复制到子进程中。

注:fork之后处理文件描述符通常有两种情况:

①父进程等待子进程结束;

②父、子进程各自执行不同的正文段(父、子进程各自关闭不需要使用的文件描述符);

 

6.fork之后父、子进程的区别:

fork的返回值;

②进程ID不同;

③父进程也不同;

④子进程的tms_utimetms_stimetms_cutimetms_ustime均被设置为0

⑤父进程设置的文件锁不会被子进程继承;

⑥子进程的未处理的闹钟被清除;

⑦子进程的未处理信号集设置为空集;

 

7.fork失败的两个主要原因:

①系统中进程数目已经达到上限;

②该实际用户的进程总数达到系统限制;

 

8.fork的两种用法:

①一个进程希望复制自己,使得父、子进程执行不同的代码段。如父进程监听端口,收到消息后,fork出子进程处理消息,父进程仍然负责监听消息。

②一个进程需要执行另一个程序。如fork后执行一个shell命令。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值