我正在读关于fork
and exec
对于考试,我的书说,每当需要在 UNIX 系统中运行一个新的(不同的)进程时,您都会分叉当前进程,然后是execve
.
然而,它也说,每当fork
被调用时,父进程的整个内存映像被复制到新进程。
那么我的问题是:如果您有一个具有非常大内存映像的进程,并且您只想运行一个新进程怎么办?如果你只是想立即替换它,那么从父进程中复制所有数据不是浪费资源吗?
通常,分叉实际上并不复制所有内存,而是使用“写入时复制”,这意味着只要内存不被修改,就会使用相同的页面。但是,为了避免以后没有足够的内存(如果进程写入内存),必须分配足够的内存。
这意味着在不允许过度使用内存的系统上从大进程分叉时,内存必须可用。因此,如果您有 8 GB 进程分叉,那么至少在短时间内必须有 16 GB 可用。
另请参阅 vfork 和 posix_spawn 了解其他解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)