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