Chinaunix首页 | 论坛 | 博客
  • 博客访问: 340542
  • 博文数量: 88
  • 博客积分: 2011
  • 博客等级: 大尉
  • 技术积分: 885
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-21 14:50
文章分类

全部博文(88)

文章存档

2010年(88)

我的朋友

分类: LINUX

2010-05-21 19:23:47

   本质上这三个系统调用都是封装的do_fork(),fork和vfork在linux上又是通过clone来实现的,只要给clone传相应的参数就是了,如:
fork  : clone(SIGCHILD,0);
vfork : clone(CLONE_VFORK | CLONE_VM | SIG_CHILD ,0);

但是既然名字都不一样,终究有点区别:

fork  : 仅有的开销知识复制父进程的页表以及给子进程创建进程描述符(task_struct)。
vfork :功能和fork相同,区别在于vfork不拷贝父进程的页表项,子进程作为父进程的一个单独的线程在其地址空间运行,除非子进程退出或者执行exec(),否则父进程会一直阻塞下去。 
clone :linux上的fork其实是通过clone来实现的,clone其实更具有一般性,它可以用来创建轻量级进程。


阅读(1538) | 评论(0) | 转发(0) |
0

上一篇:Linux内核中的锁

下一篇:Linux设备驱动

给主人留下些什么吧!~~