检查进程环境变量

使用 env 命令可以查看系统当前的环境变量。有时候我们希望能够查看一个处在运行状态的进程的环境变量。

在 Linux 系统下面,进程的环境变量信息可以通过 /proc/<pid>/environ 文件查看:

1
$ cat /proc/<pid>/environ

该命令的输出格式不太容易读,所有的信息挤在了同一行。使用 tr 命令将空字符替换为换行符,将会使所有的环境变量按行显示:

1
$ cat /proc/<pid>/environ | tr \\0 \\n

在 Mac OSX 系统下面,可以使用下面的命令,其中的 -E 选项表示打印进程的环境变量:

1
$ ps -p <pid> -wwwE

不过上面提到的方法并没有覆盖到所有的情况。进程的环境变量来自于两部分:进程初始化时由加载器载入的环境变量(来自于系统、父进程或者 exec 系统调用的参数);和进程执行过程中由 setenv 函数动态设置或修改的环境变量。前面的命令仅会显示第一部分的环境变量。

进程的环境变量保存在全局变量 char **__environ 中。要想显示由进程动态修改的环境变量,首先必须有这个进程的符号表,然后通过 ptrace 系统调用(比如使用 gdb)来查看。