一 程序地址空间,二 进程等待 三 程序替换

5 篇文章 0 订阅

一 进程地址空间:::

就三个概念 一个是 页表 一个是 地址空间 一个是 物理内存

我们在c 和c++ 里面打印出来的地址 就是虚拟地址

在这里我们创建一个全局变量 global_val; 的值

我们通过父子进程操作 改变 global_val 的值 我们发现 地址都是一样的 但是值是不一样的 ,那么这个地址是实际的物理内存吗? 答案是肯定不是的, 这个是进程地址空间 他们对应一个页表,然后再对应物理内存 我们再实际操作中 能直接访问物理内存吗 答案也是不可以的 我们是通过进程地址空间和页表进而影响物理内存的变化的。。。

二 进程等待

::为什么要让父进程等待

1 子进程退出 父进程如果不管不顾就会造成僵尸进程 进而造成内存泄漏

2 进程一旦变成僵尸进程 kill -9 也杀不死

3 子进程运行完成后 结果对还是不对或者是否正常退出了

4 父进程通过进程等待的方式回收子进程资源 获取子进程的退出信息

等待方法i

#include<sys/tyeps.h>

1 wait(int * status) 2 waitpid(pid_t id ,int * status,int options)

waitpid(id,NULL,0) id 也可以写成-1 -1的话就是等待任意一个子进程的id

status 的值 两个部分 包括 退出状态 和终止信号 正常请客下都为0

用 第16位。获取退出状态可以用 (status>>8)&0xFF , 退出信号(status&x7F);也可以用

WIFEXITED(status) 判断子进程退出 用WEXITSTATUS(status) 获取退出状态

options 如果是9 就是阻塞等待 也可以写成非阻塞等待 WNOHANG

程序替换

如果我想让子进程 执行一个全新的程序的 就需要进程程序替换了

程序的本质就是一个文件 文件=程序的代码 加上程序数据

替换函数:::

进程替换  进程不变仅仅替换当前进程代码和数据的技术,  程序替换的本质 就是程序的代码和数据 加入到特定的进程当中去,execl execle execv execve 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值