Linuxがexecve()に渡された環境変数をどのように処理するかについて質問があります。
execve()の概要: int execve(const char * filename、char * const argv []、char * const envp []);
execve()を呼び出す前に、現在のプロセスのメモリマッピングからenvs/argsを保持するためのメモリを割り当てます。ただし、execve()の後、呼び出し元プロセスのすべてのtext / data / bss / stackは新しいプログラムによって上書きされ、古いプロセスのすべてのメモリマッピング(渡されたenvs / argsのメモリを含む)は保持されません。
新しいプログラムの場合、envs / argsをどこで読み取るか?カーネルは渡されたenvs/argsのコピーを作成し、それを新しいメモリマッピング、またはその他のトリックに配置しますか?