【发布时间】:2017-02-14 02:33:52
【问题描述】:
我目前正在学习fork() 和execv(),我对组合的效率有疑问。
我看到了以下标准代码:
pid = fork();
if(pid < 0){
//handle fork error
}
else if (pid == 0){
execv("son_prog", argv_son);
//do father code
我知道fork() 克隆了整个进程(复制整个堆等)并且execv() 用新程序的地址空间替换了当前地址空间。考虑到这一点,使用这种组合是否会变得非常低效?我们正在复制一个进程的整个地址空间,然后立即覆盖它。
所以我的问题:
使用这种组合(而不是其他一些解决方案)实现的优势是什么,使人们仍然使用它,即使我们有浪费?
【问题讨论】:
-
很久以前,系统实际上一次复制了所有内容。我建议你了解paging、virtual memory和copy on write。
标签: linux unix operating-system multiprocessing fork