进程3

本文深入探讨了进程管理中的关键概念,包括程序地址空间、虚拟地址空间的管理,以及fork和vfork在进程创建中的作用。详细解析了写时复制技术和进程终止的各种场景,阐述了如何正确等待子进程退出,避免僵尸进程的产生。
程序地址空间:进程的虚拟地址空间
            虚拟地址空间:mm_struct,内存描述符

进程控制:
      fork--通过复制调用进程创建一个新的子进程,复制--pcb代码共享,数据独有--程序计数器(运行的位置也一样)
                返回值:父进程返回子进程的Pid,子进程返回0;
                写时复制技术
     vfork--创建子进程,共用同一个虚拟地址空间--(共用同一个调用栈)为了防止调用栈混乱,因此父进程调用vfork会阻塞,
                                                                               阻塞到子进程“exit退出”或者子进程程序替换(不能return退出,会释放自己的地址空间),开辟内存创建自己的地址空间
fork/vfork在内核中创建进程都是调用clone函数实现pcb创建并拷贝数据的;
vfork存在的意义是为了创建子进程的效率更高,但是fork通过写时拷贝技术实现了进程创建;

进程终止:   进程退出
           退出场景:正常退出(结果符合预期),异常退出
           如何退出:只有main 函数中return 1; //退出前刷新缓冲区
                            void exit这是一个库函数;//任意位置都是退出进程,退出前刷新缓冲区
                             void_exit这是一个系统调用接口  ;//不会刷新缓冲区,即不会打印(去掉printf中\n就可以打印)
库函数和系统调用接口的关系:上下级的封装调用关系

进程等待:等待子进程的状态改变(等待子进程的退出)------获取子进程的退出返回值,避免子进程成为僵尸进程;
                    若父进程获取了子进程的返回值,僵尸子进程将没有存在的意义,就会被释放资源
                    因为不知道何时退出,因此只能创建之后一直等着子进程的退出
             为什么要等待子进程的退出:因为子进程退出时,为了保存退出原因,因此操作系统不能释放子进程全部资源,因此通知获取子进程推出返回值
                                                        允许释放资源,但是操作系统的通知没有使父进程关注到子进程的退出,因此子进程成为僵尸进程。
              如何等待:pid_t wait(int *status)
                               pid_t waitpid(int pid,int* statu,int option)
                                wait接口功能时以置等待任意一个子进程退出,子进程退出后,获取到返回值,放到传入的参数statu中
                                                                                                          如果没有子进程退出,wait函数将一直阻塞;
                                waitpid可以等待指定的一个子进程退出,并且可以设置为非进程;
               阻塞:为了完成一个功能发起系统调用,当前若不具备完成条件,等待直到条件具备完成功能后返回;
              非阻塞:为了完成一个功能发起系统调用,当前若不具备完成条件,则立即报错返回;



  statu中,高16位没有使用,其中低16位中,高八位存储子进程退出返回值,低八位中的高一位中存储core dump标志,低七位中的存储一场推出信号值
                       低七位中异常退出返回值若为0,则表示程序正常退出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记得多喝热水…

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值