调用 exec() 时复制了什么?
What get copied over when exec() is called?
假设我们输入了wget
命令。我的理解是 shell 调用 fork()
并创建了一个子进程。在调用exec()
之前的这一刻,子进程与父进程完全相同,除了进程ID之类的东西。
然后当调用 exec()
时,内核用 wget
替换子进程的映像。
但是环境变量没有被覆盖,所以我很困惑什么被替换了,什么被父进程保留了。
你问的完全是系统特定的。对于 eunuchs 系统,将预留一些内存区域,不会在 exec () 上重新映射。在Linux,我相信这个区域在用户地址space的高端。
以下是我对您问题的拙劣尝试。不过,我怕这个回答太过分了。
exec() 对进程属性的影响
此外,请访问 execve 手册页。
假设我们输入了wget
命令。我的理解是 shell 调用 fork()
并创建了一个子进程。在调用exec()
之前的这一刻,子进程与父进程完全相同,除了进程ID之类的东西。
然后当调用 exec()
时,内核用 wget
替换子进程的映像。
但是环境变量没有被覆盖,所以我很困惑什么被替换了,什么被父进程保留了。
你问的完全是系统特定的。对于 eunuchs 系统,将预留一些内存区域,不会在 exec () 上重新映射。在Linux,我相信这个区域在用户地址space的高端。
以下是我对您问题的拙劣尝试。不过,我怕这个回答太过分了。
exec() 对进程属性的影响
此外,请访问 execve 手册页。