- 论坛徽章:
- 0
|
1.environ是全局变量,我想了解一下在被赋值前,它指向的是哪里的什么数据?
当前执行的程序是shell进行fork后的一个子进程,并exec.
子进程继承父进程的环境变量,因此它指向的数据就是执行程序的shell的环境变量表.
如果你查看当前shell的环境变量表,在shell里执行env命令
2.它被例子程序重新赋值后是否又被重赋原来指向的值?如果是这样,在哪里被重新赋值的呢?
没有.每个进程,不管是你的程序,还是shell,都有自己的环境变量,在你的程序中TERM=vt100.但当进程结束后,该程序的环境变量自然被释放了,注意的是该程序的环境变量的更改并不会影响父进程shell的环境变量
3.fork操作复制进程创建子进程,如果environ所指的数据同样被复制给了子进程,那么environ这个指针有没有在fork后就指向了子进程中的那个字符串数组呢?
fork后,子进程获得了父进程的数据空间,堆,栈的副本.这里就包含环境environ.
4.环境是Unix系统的概念,有书说环境是Unix中进程传递信息的途径之一。这里我理解的环境是environ所指向的那个字符串数组,那么当一个进程执行时,它所依赖的环境已经被复制到进程空间里了吗?
当进程fork后,子进程就继承了父进程的环境变量,当exec如果是execl, execv, execlp, execvp环境表会传给exec后的进程.如果execle, execve 就是自己定义环境表.
5.如果是这样,多个进程中的“环境”与唯一的environ是怎样保持协调的呢?
每个进程都有自己的环境变量environ,它一般存放在该进程存储空间的高地址中. |
|