Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69206
  • 博文数量: 12
  • 博客积分: 277
  • 博客等级: 二等列兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-01 02:45
文章分类

全部博文(12)

文章存档

2011年(12)

我的朋友

分类: C/C++

2011-12-25 15:07:29

一、fork函数
     
   一个现存进程调用fork函数是UNIX内核创建一个新进程的唯一方法(这并不适用于交换进程、init进程)。
 
--------------------------------------------------------------------------------------
#include
#include
 
pid_t fork(void);
--------------------------------------------------------------------------------------
 
由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程ID。将子进程ID返回给父进程的理由是:因为一个进程的子进程可以多于一个,所以没有一个函数使一个进程可以获得其所有子进程的进程ID。fork使子进程得到返回值0的理由是:一个进程只会有一个父进程,所以子进程总是可以调用getppid以获得其父进程的进程ID(进程ID 0总是由交换进程使用,所以一个子进程的进程ID不可能为0)
 
子进程和父进程继续执行fork之后的指令。子进程是父进程的复制品。例如,子进程获得父进程数据空间、堆和栈的复制品。注意,这是子进程所拥有的拷贝。父、子进程并不共享这些存储空间部分。如果正文段是只读的,则父、子进程共享正文段。
 
vfork函数
 
vfork函数的调用序列和返回值与fork相同,但两者的语义不同。
 
vfork用于创建一个新的进程,而该新进程的母的是exec一个新程序。vfork与fork一样都创建一个子进程,但是它并不讲父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec(或exit),于是也就不会存访该地址空间。不过在子进程调用 exec或exit之前,它在父进程的空间中运行。这种工作方式在某些unix的页式虚存实现中调高了效率。
 
vfork和fork之间的另一个区别是:vofork保证了子进程先运行,在它调用exec或eixt之后父进程才肯可能被调度运行。(如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁)。  

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

上一篇:全缓冲/行缓冲/不带缓冲

下一篇:没有了

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