章节大纲

  • 在本任务中,我们研究如果使用 execve() 执行新程序,环境变量会受到怎样的影响。execve() 函数会调用系统调用来加载并执行新的程序。该函数不会创建新的进程,而是会用新的程序的内容覆盖进程的代码和数据区域,也就是说,execve() 是在调用进程的内部运行新程序。我们关注的是环境变量的变化,它们是否会被保留在新程序中?

      • 请编译并运行以下程序,并描述你的观察结果。此程序简单地执行名为 /usr/bin/env 的程序,该程序会打印当前进程的环境变量。

        #include <unistd.h>
        
        extern char **environ;
        int main()
        {
          char *argv[2];
        
          argv[0] = "/usr/bin/env";
          argv[1] = NULL;
          execve("/usr/bin/env", argv, NULL);   ①
        
          return 0;
        }
      • 将 ① 中的 execve() 调用改为以下形式,描述你的观察结果。

        execve("/usr/bin/env", argv, environ);