最可靠方式是读取/proc/[pid]/environ文件:该文件以null字符分隔存储进程启动时继承的环境变量,需用cat /proc/1234/environ | tr '\0' '\n'解析,权限不足时需root;当前shell可用env、printenv等命令查看,但环境变量仅指父进程传递的key=value集合,不含本地变量或运行时内存变量。

直接查看某个进程的环境变量,最可靠的方式是读取其 /proc/[pid]/environ 文件。
通过 /proc/[pid]/environ 查看
Linux 为每个运行中的进程在 /proc 文件系统中维护一个虚拟目录,其中 environ 文件以 null 字符(\0)分隔存储了该进程启动时继承的全部环境变量。
- 先获取目标进程 PID,例如:
ps aux | grep myapp或pidof nginx - 用
cat配合tr将 null 分隔符转为换行,便于阅读:cat /proc/1234/environ | tr '\0' '\n' - 若权限不足(如查看其他用户进程),需 root 权限或确保当前用户有访问对应
/proc/[pid]的权限
查看当前 Shell 进程的环境变量
当前终端会话本身就是一个进程,它的环境变量可直接通过 shell 命令查看:
-
env:列出所有环境变量(不含 shell 本地变量) -
printenv:功能同env,更侧重“打印”语义 -
echo $PATH、printenv HOME:查看单个变量值 -
set:显示所有变量(含本地变量和函数),输出量大,通常配合grep使用
注意:环境变量不等于进程内存里的所有变量
环境变量仅指进程启动时由父进程传递的 KEY=VALUE 字符串集合,不包括:
- 程序运行中动态分配的内存变量(如 C 中的局部变量)
- 未用
export声明的 shell 本地变量(它们不会传给子进程) - 进程自己修改但未写回环境块的变量副本(如子 shell 中改
PATH不影响父进程)
补充:从代码层面获取
程序自身可通过三种标准方式访问环境变量:
- C 语言中调用
getenv("PATH") - 在
main(int argc, char *argv[], char *envp[])的第三个参数遍历 - 使用全局变量
extern char **environ;直接访问











