《Unix内核源码剖析》读书笔记02-进程管理【父进程与子进程】

一、进程的生命周期
(1)某个进程通过系统调用fork,创建一个用于执行程序的进程。生成此进程的进程称为子进程。子进程通过复制父进程的数据得以创建。
(2)父进程执行系统调用wait,进入等待状态 。
(3)子进程通过系统调用exec将程序读取到内存中并开始执行。
(4)子程序执行完后,通过系统调用exit结束自身运行进入僵尸态。
(5)父进程得到控制权,得到子进程的执行结果后清除子进程。
简言之,进程不会无缘无故地凭空产生,必定有一个父进程。

1 i = fork(); /*返回进程ID*/
2 if(i==0){
3 execv(program_name,argv);
4 exit(); /*防止execv执行失败*/
5 }
6 while(wait() != i);/*wait返回已经结束的子进程的ID*/

父进程执行第一句,创建了子进程然后开始执行第六句,进入等待状态。
注意:这里不能简单地按照C语言顺序执行的理解看上面的代码。
我的理解是父进程执行到第六句时,子进程还在执行第一句,子进程完成fork后,返回0,然后进入if语句,结束自己的进程。而接下来父进程也走出了while语句。【也就是说两条线在执行2-5行代码,父进程和子进程】
二、子进程和父进程之间怎样传递数据?
上面提到,子进程得到父进程的数据,子进程执行完后结果也要返还给父进程。两者之间如何共享数据?

  • 复制proc[]数组元素
    • 子进程的proc.p_ppid指向父进程的proc.p_pid
  • 复制数据段
    • 子进程继承已打开的文件和当前目录等数据
    • 子进程的user.p_procp指向proc[]中代表子进程的元素
    • 子进程和父进程共享text[]中相同的元素【text[]管理代码段】

三、如何确定进程间的父子关系?
1、子进程的proc.p_ppid为父进程的ID
2、父进程通过遍历proc[]找到自己的子进程
-

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值