如何获取一个很短的进程的环境变量?

如何获取一个很短的进程的环境变量?

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

例子

user:~$ ps aux | grep grep
user   2349  0.0  0.0   4384   840 pts/1    S+   14:47   0:00 grep --color=auto grep

该进程的 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

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

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

答案1

如果你有strace

strace -v -e execve cmd

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

strace -v -s 10000 -e execve cmd

答案2

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

例如

mv ${cmd} ${cmd}.moved

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

#!/bin/sh
env > /tmp/cmd-env.log
exec ${cmd}.moved "$@"

并且,不要忘记权限:

chmod a+rx ${cmd}

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

最后,将原来的程序放回原来的位置:

mv ${cmd}.moved ${cmd}

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

相关内容