如何获得一个非常短的过程的环境变量?

The*_*eer 3 process environment-variables proc

我有一个很短的过程,我想检查环境变量以进行调试。从人类的角度来看,这个过程是即时的。这个例子更好地说明了这一点。

例子

user:~$ ps aux | grep grep
user   2349  0.0  0.0   4384   840 pts/1    S+   14:47   0:00 grep --color=auto grep
Run Code Online (Sandbox Code Playgroud)

进程的 pid 是 2349。如果我检查环境变量(或其他信息):

#Pretty print of environmental variables#
user:~$ xargs --null --max-args=1 echo < /proc/2349/environ
bash: /proc/2349/environ: No such file or directory
Run Code Online (Sandbox Code Playgroud)

信息随着这个过程消失了。

在运行进程之前要做什么才能在进程完成后列出变量?

llu*_*lua 9

如果你有 strace

strace -v -e execve cmd
Run Code Online (Sandbox Code Playgroud)

如果变量的值太长,您可以增加字符串大小 -s

strace -v -s 10000 -e execve cmd
Run Code Online (Sandbox Code Playgroud)


ams*_*ams 5

我会将二进制文件移到一侧并创建一个包装器,将环境转储到文件中,然后调用原始文件。

例如

mv ${cmd} ${cmd}.moved
Run Code Online (Sandbox Code Playgroud)

然后创建一个新文件${cmd}

#!/bin/sh
env > /tmp/cmd-env.log
exec ${cmd}.moved "$@"
Run Code Online (Sandbox Code Playgroud)

并且,不要忘记权限:

chmod a+rx ${cmd}
Run Code Online (Sandbox Code Playgroud)

然后,等待它再次运行,并从/tmp/cmd-env.log.

最后,将原始程序放回原处:

mv ${cmd}.moved ${cmd}
Run Code Online (Sandbox Code Playgroud)

当然,可以通过将包装器bin放在$PATH.