当前位置: 技术问答>linux和unix
关于 写时复制 技术的问题
来源: 互联网 发布时间:2017-03-21
本文导语: 直奔主题吧: 我一开始创建子进程的时候使用的fork,没有用exec函数,那么应该是说所有的数据段、堆栈段完全复制一份副本给子进程吧。那么 1、如果只想用父进程里面的个别变量的时候是不是就应该使...
直奔主题吧:
我一开始创建子进程的时候使用的fork,没有用exec函数,那么应该是说所有的数据段、堆栈段完全复制一份副本给子进程吧。那么
1、如果只想用父进程里面的个别变量的时候是不是就应该使用fork+exec了?
2、fork+exec是不是就是用的写时复制技术呢?
3、这几个变量子进程直接用就可以 还是说要通过exec函数的参数传递?
我一开始创建子进程的时候使用的fork,没有用exec函数,那么应该是说所有的数据段、堆栈段完全复制一份副本给子进程吧。那么
1、如果只想用父进程里面的个别变量的时候是不是就应该使用fork+exec了?
2、fork+exec是不是就是用的写时复制技术呢?
3、这几个变量子进程直接用就可以 还是说要通过exec函数的参数传递?
|
不明白,你是想父子进程间通信吗?
一个变量在父进程中的变化同步到子进程?
若是的话,通道,共享内存,文件
一个变量在父进程中的变化同步到子进程?
若是的话,通道,共享内存,文件
|
楼主没理解什么叫写时复制.
fork后,子进程和父进程的代码段,数据段等都是一样的.并且些时他们的虚拟线性地址都使用同一块物理内存.只有当其中一个改变内存值时,他们的这块线性地址映射到的物理内存才会发生变化.
这样就能将fork的开锁降到最低.
exec就是替换此进程的内存映像.此进程就真正的改头换面了.以前的内存中的值和现在没关系了.
exec函数族中,会传递环境变量,参数给新的程序.
fork后,子进程和父进程的代码段,数据段等都是一样的.并且些时他们的虚拟线性地址都使用同一块物理内存.只有当其中一个改变内存值时,他们的这块线性地址映射到的物理内存才会发生变化.
这样就能将fork的开锁降到最低.
exec就是替换此进程的内存映像.此进程就真正的改头换面了.以前的内存中的值和现在没关系了.
exec函数族中,会传递环境变量,参数给新的程序.
|
exec是执行一个完整的程序。。请问这个完整的程序里面的各种变量命名,地址等都是独立的,他会有自己的初始化,如何使用。他如何与替换的那个进程镜像的变量共享???
要给exec传递变量,只能通过exec的参数,传进去成命令行参数.
要给exec传递变量,只能通过exec的参数,传进去成命令行参数.
|
写时复制,那当时是只复制要改变的这一页了。要是全复制了,那写时复制也没多大意思了。
|
exec后的新程序,最多会继承文件描述符.shell中的管道就是因为继承文件描述符0,1,2
|
fork自己就叫写时复制了,redis借助这个特性实现数据快照备份。