我需要解决一些与 Unix 系统上的环境变量相关的问题。
在 Windows 上,我可以使用 ProcessExplorer 之类的工具来选择特定的进程并查看每个环境变量的值。
我怎样才能在 Unix 上完成同样的事情?echoing
和env
cmd 只显示当前的值,但我想查看正在运行的进程当前使用的值。
我需要解决一些与 Unix 系统上的环境变量相关的问题。
在 Windows 上,我可以使用 ProcessExplorer 之类的工具来选择特定的进程并查看每个环境变量的值。
我怎样才能在 Unix 上完成同样的事情?echoing
和env
cmd 只显示当前的值,但我想查看正在运行的进程当前使用的值。
如果您想拥有给定正在运行的可执行文件的 pid(s),您可以在许多其他可能性中使用
pidof
:编辑:
我完全引用了Dennis Williamson和Teddy的评论,以实现更易读的输出。我的解决方案如下:
由于这个问题有一个unix标签,而其他人在解决linux标签方面做得很好,你可以使用 OS X 和其他 BSD 派生系统获取此信息
或者
在 Solaris 上
/proc
如果您不想记住晦涩的命令, Solaris 也支持该目录ps
。正如其他人所提到的,在 Linux 上,您可以查看 /proc 但根据您的内核版本,有一个或两个限制:
首先,environ 文件包含进程生成时的环境。这意味着进程可能对其环境所做的任何更改都不会在 /proc 中可见:
第一个 shell 是一个登录 shell,最初有一个非常有限的环境,但通过采购例如 .bashrc 来扩展它,但 /proc 并没有反映这一点。第二个 shell 从一开始就继承了更大的环境,这就是它在 /proc 中显示的原因。
此外,在较旧的内核上,environ 文件的内容仅限于页面大小(4K):
在 2.6.9 (RHEL4) 和 2.6.18 (RHEL5) 之间的某个地方,这个限制被删除了......
正确使用 BSD 选项来执行此操作(至少在 linux 上):
或者
是的,ps 联机帮助页非常混乱。(通过)
虽然文档很少,但 的内容
/proc/<pid>/environ
将仅包含用于启动该过程的环境。如果您需要检查进程环境的当前状态,一种方法是使用
gdb
.将 PID 替换为您要查看的进程的 PID。有关正在运行的进程的所有信息都在 /proc/PID/ 目录下
示例:cat /proc/32512/environ
取自Archlinux wiki:
您可以创建一个临时函数来解析
/proc/<pid>/environ
. 在终端提示符下:然后使用您想要的进程的pid,只需使用:
在Linux下,我会尝试看看
对于 Solaris 5.10,这有效:
既然我的工作让我成为了一个 AIX 粉丝,让我们不要忘记:
或者正如手册页所称,“伯克利标准”。
无论出于何种原因,/proc/PID/environ 在 AIX 中都不存在。