在 Linux 中,进程的环境变量主要来自内核在创建进程时传入的 环境块(environment block),不同场景下查看位置如下:
每个进程的环境变量保存在自己的地址空间中,通常通过:
main(int argc, char *argv[], char *envp[])environ 全局变量访问示例(C):
extern char **environ;
env
# 或
printenv
echo $PATH
/proc(最常用)cat /proc/<pid>/environ
环境变量以 \0 分隔,可读格式:
tr '\0' '\n' < /proc/<pid>/environ
示例:
tr '\0' '\n' < /proc/1234/environ
ps e -p <pid>
不同进程的初始环境变量来自不同地方:
/etc/profile~/.bash_profile~/.bashrc/etc/environment/etc/systemd/system/<service>.service 中:Environment=KEY=value
EnvironmentFile=/etc/sysconfig/xxx
Dockerfile 中 ENVdocker run -e KEY=valueLinux 进程的环境变量在
/proc/<pid>/environ,来源于启动它的父进程和配置文件。
如果你有具体场景(比如:某个服务环境变量不对、Docker、systemd、Java 进程等),可以告诉我,我可以更针对性说明。