非常に短いプロセスの環境変数を取得するには?

非常に短いプロセスの環境変数を取得するには?

デバッグ目的で環境変数をチェックする非常に短いプロセスがあります。人間の観点から見ると、その過程は即時です。この例はこれをよりよく示しています。

はい

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

関連情報