$PATH环境变量属于哪个进程?

$PATH环境变量属于哪个进程?

环境变量必须属于一个进程,对吗?似乎存在事实上的“全局”环境变量,例如 $PATH 和 $HOME。它们属于哪个进程?

答案1

没有单个 PATH 变量,并且它不属于单个进程。

每个进程都有一个环境,它由键值对列表组成。键通常被命名为“变量”。该export命令列出了该环境。进程从其父进程继承其环境(在 UNIX 中,甚至在父进程死亡之前就可以继承。这不是很好吗?)。

例如,您可以将任何变量放入环境中export birthday="Jan 23",但有些变量对于 shell 有特殊含义,例如 HOME 或 PATH。其他变量对于某些程序有特殊含义;例如,请参阅环境部分在该命令的手册页中man

综上所述,每个进程都有PATH和HOME。

答案2

环境通常通过以下方式传递给新进程执行使用指向保存数组的内存区域的指针envp

   int execve(const char *pathname, char *const argv[],
              char *const envp[]);

环境通常是继承的,但也基本上是通过例如读取/etc/environment(核心 $PATH)构建的。 Bourne shell/etc/profile还读取本地配置文件等。

除了上述之外,POSIX 执行*阅读可能会有用。

相关内容