(1)fork()的定义

fork()函数是Unix中派生新进程的唯一方法,声明如下:

  1. #include <unistd.h>
  2. pid_t fork(void);

我们需要理解的是,调用一次fork()方法,该方法会返回两次。一次是在调用进程(也就是派生出的子进程的父进程)中返回一次,返回值是新派生的进程的进程ID。一次是在子进程中返回,返回值是0,代表当前进程为子进程。如果返回值为-1的话,则代表在派生新进程的过程中出错。

那么在程序中,我们就可以根据此返回值来判断当前进程是父进程还是子进程,来实现一些具体的操作。例如:

  1. int main()
  2. {
  3. pid_t pid;
  4. if((pid = fork()) = 0)
  5. {
  6. // TODO: 在子进程中实现具体操作
  7. // ...
  8. exit(0); // 结束子进程
  9. }
  10. // TODO: 在调用进程(父进程)实现具体操作
  11. }

(2)fork()的实质过程

父进程中在调用fork()派生新进程,实际上相当于创建了进程的一个拷贝;即在fork()之前的进程拥有的资源会被复制到新的进程中去。网络服务器在处理并发请求时,也可以采取这种派生新进程的方式: 父进程调用accept()后调用fork()来处理每一个连接。那么,所接受的已连接的套接口随后就在父子进程中共享。通常来说,子进程会在这连接套接口中读和写操作,父进程则关闭这个已连的套接口(可以参考:http://blog.csdn.net/moxiaomomo/article/details/6791763)

(3)fork()的用法

fork()有两个典型用法:(1)一个进程进行自身的复制,这样每个副本可以独立的完成具体的操作,在多核处理器中可以并行处理数据。这也是网络服务器的其中一个典型用途,多进程处理多连接请求。 (2)一个进程想执行另一个程序。比如一个软件包含了两个程序,主程序想调起另一个程序的话,它就可以先调用fork来创建一个自身的拷贝,然后通过exec函数来替换成将要运行的新程序。

最新文章

  1. 插入排序 - C语言
  2. 【转】IE劫持原理 BHO
  3. Decorator(装饰)-对象结构型模式
  4. Winform开发框架之权限管理系统改进的经验总结(4)-一行代码实现表操作日志记录
  5. SSH框架总结(框架分析+环境搭建+实例源码下载) 《转》
  6. 收集的User-Agent
  7. Delphi内嵌汇编语言BASM精要(转帖)
  8. go语言包与包引用
  9. poj 1300 Door Man 欧拉回路
  10. 安装VMware-tools的问题
  11. white-space 属性设置如何处理元素内的空白
  12. R与数据分析旧笔记(十五) 基于有代表性的点的技术:K中心聚类法
  13. BlokUI的使用
  14. Android平台调用Web Service:螺纹的引入
  15. 新型钓鱼手段预警:你看到的 аррӏе.com 真是苹果官网?
  16. 练习html,css,js仿制百度首页
  17. Java开发知识之Java的枚举
  18. Eclipse控制台输出log日志中文乱码
  19. ORA-12560: TNS:protocol adapter error
  20. QQ第三方登录(预备节)

热门文章

  1. AspNetUsers
  2. Html.RenderPartial、Html.RenderAction联系与区别
  3. weblogic 的安装和配置
  4. 【转】Flume(NG)架构设计要点及配置实践
  5. svn 切出指定版本、更改版本名称、删除分支
  6. Linux服务器管理: 系统的进程管理top命令
  7. 了不起的Node.js读书笔记
  8. Python网络socket学习
  9. MySql的安装及配置详细指引!
  10. nyoj 171 聪明的kk