|

楼主 |
发表于 2005-6-1 17:42:37
|
显示全部楼层
Post by zhllg
每个进程都有自己的环境变量,在进程地址空间的堆栈底部,main函数的参数(argc,argv)的上方
每个进程都有能力改变的自己的环境变量
man 3 setenv
man 3 getenv
man 3 putenv
man 3 clearenv
man 5 environ
不是每个进程都会去改变自己的环境变量
但基本都会根据自己的环境变量来决定自己的行为方式
shell变量就是shell里的环境变量
和一般的进程的环境变量相比,它有更重要的意义
因为除了守护进程其他进程都是shell启动的
export了的bash的环境变量就可以在fork的时候传递给子进程
子进程就可以根据从shell继承过来的环境变量,决定自己的行为
还有就是shell是交互式的,改变环境变量也容易
谢谢zhllg的精彩回答。按照你的方法,我实验了一下,看到了。呵呵,下面说说我的理解看对不对:
环境变量是每一个进程(内存映像?)里的一部分,当用fork系统调用创建一个进程时,子进程得到父进程环境变量表的一个副本。如果是用shell启动一个进程的话,这个进程就会得到shell export 了的bash环境变量。而没有export的shell环境变量就不复制到子进程。 |
|