Task1:
使用 printenv 或env 命令打印环境变量。
(补充可打印特殊环境变量printenv PWD或 env | grep PWD)
Printenv PWD, env |grep PWD
用export 或者 unset 去设置或者删除环境变量
Task2:
编译myprintenv.c, 运行且将结果保存到file,“a.out>file”
注释掉子进程里的 printenv()Line①,但不注释父进程的。重新编译查看结果,并保存到另一个文件
运行,./a.out
子进程是父进程的副本,它将获得父进程的环境变量、数据空间、堆、栈等资源的副本。但是,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间,它们之间共享的存储空间只有代码段。
用diff命令比较两个文件的结果,得出结论
File:
输出结果相同,父子进程的环境变量相同,子进程会完全继承父进程的环境变量
两个二进制文件相同,diff就什么也不显示。
结论:两次的输出相同,一次是父进程的输出,一次是子进程的输出。结合说明文档,可以看出父子进程有着相同的环境变量。
Task3 execve()
请编译并运行以下程序,并描述您的观察结果。这个程序简单地执行一个名为/usr/bin/env的程序,它打印出当前进程的环境变量。
结果:无输出 ,传递给文件的新环境变量数组为NULL,所以没有环境变量被打印出来
将第一行改成execve("/usr/bin/env", argv, environ)