Chinaunix首页 | 论坛 | 博客
  • 博客访问: 688137
  • 博文数量: 240
  • 博客积分: 3616
  • 博客等级: 大校
  • 技术积分: 2663
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-21 23:59
文章分类

全部博文(240)

文章存档

2013年(6)

2012年(80)

2011年(119)

2010年(35)

分类: LINUX

2010-10-25 15:54:24

#include
#include
#include
#include
int main(void)
{
 pid_t result;  //定义一个pid_t类型的变量,至于是什么类型的,不用管,具体
                       //看内核原代码 
 result=fork(); //调用fork函数,读其返回值
 if(result==-1) //异常判断
 {
  perror("fork");
  exit;
 }
 else if(result==0)//代表运行在子进程
 {
  printf("the return value is %d\n In chlid process !!\n my pid is %d\n",result,getpid()); 
  
 }
 else //代表运行在父进程
 {
  printf("the return value is %d\n in father process !!\n my pid is %d\n",result,getpid());
   
 }

}
/*------------------------------------------------
notes:
1.fork():它执行一次却返回两个值
2.fork函数说明:
fork函数用于从已存在进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。
这两个分别带回它们各自的返回值,其中父进程的返回值是子进程的进程号,而子进程则
返回0。因此,可以通过返回值来判断该进程是父进程还是子进程。
3.使用fork函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址
空间,包括进程上下文,进程堆栈,内存信息,打开的文件描述符,信号控制设定,进程
优先级,进程组号,当前工作目录,根目录,资源限制,控制终端等,而子进程所独有的只
有它的进程号,资源使用和计时器。
3.fork函数语法:
1)需头文件
#include //提供类型pid_t的定义
#include
2)函数原型:
pid_t fork(void)
3)函数返回值
0:子进程
子进程ID(大于0的整数):父进程
-1:出错
4.函数使用注意点:
fork函数使用一次就创建一个进程,所以若把fork函数放在了if else判断语句中则要小心,
不能多次使用fork函数.
5.vfork:
由于fork完整copy了父进程的整个地址空间,因此执行速度是很慢的,为了加快执行速度,
系统设计者创建了vfork.vfork也能创建新进程,但它不产生父进程的副本.它是通过允许
父子进程可访问相同物理内存从而伪装了对进程地址空间的真实copy,当子进程需要改变内
存中数据时才copy父进程。
6.vfork函数说明:
1)需头文件
#include //提供类型pid_t的定义
#include
2)函数原型:
pid_t vfork(void)
3)返回值
如果vfork()成功则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则
返回0。如果vfork失败则直接返回-1,失败原因存于errno中。
7.fork PK vfork
区别:
1).fork:子进程COPY父进程的数据段。
 vfork:子进程与父进程共享数据段。
2).fork:父,子进程的执行次序不确定。
   vfork:子进程先运行,父进程后运行。
-----------------------------------------------*/
 
 
阅读(604) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-26 18:25:53

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com