使用 env
命令可以查看系统当前的环境变量。有时候我们希望能够查看一个处在运行状态的进程的环境变量。
在 Linux 系统下面,进程的环境变量信息可以通过 /proc/<pid>/environ
文件查看:
$ cat /proc/<pid>/environ
该命令的输出格式不太容易读,所有的信息挤在了同一行。使用 tr
命令将空字符替换为换行符,将会使所有的环境变量按行显示:
$ cat /proc/<pid>/environ | tr \\0 \\n
在 Mac OSX 系统下面,可以使用下面的命令,其中的 -E
选项表示打印进程的环境变量:
$ ps -p <pid> -wwwE
不过上面提到的方法并没有覆盖到所有的情况。进程的环境变量来自于两部分:进程初始化时由加载器载入的环境变量(来自于系统、父进程或者 exec
系统调用的参数);和进程执行过程中由 setenv
函数动态设置或修改的环境变量。前面的命令仅会显示第一部分的环境变量。
进程的环境变量保存在全局变量 char **__environ
中。要想显示由进程动态修改的环境变量,首先必须有这个进程的符号表,然后通过 ptrace
系统调用(比如使用 gdb)来查看。