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)
信息随着这个过程消失了。
在运行进程之前要做什么才能在进程完成后列出变量?
如果你有 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)
我会将二进制文件移到一侧并创建一个包装器,将环境转储到文件中,然后调用原始文件。
例如
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
.