调用 exec() 时复制了什么?

What get copied over when exec() is called?

假设我们输入了wget命令。我的理解是 shell 调用 fork() 并创建了一个子进程。在调用exec()之前的这一刻,子进程与父进程完全相同,除了进程ID之类的东西。

然后当调用 exec() 时,内核用 wget 替换子进程的映像。

但是环境变量没有被覆盖,所以我很困惑什么被替换了,什么被父进程保留了。

你问的完全是系统特定的。对于 eunuchs 系统,将预留一​​些内存区域,不会在 exec () 上重新映射。在Linux,我相信这个区域在用户地址space的高端。

以下是我对您问题的拙劣尝试。不过,我怕这个回答太过分了。

exec() 对进程属性的影响

此外,请访问 execve 手册页。