GNU/Linux >> Linux の 問題 >  >> Linux

Unixで実行中のプロセスの環境変数?

解決策 1:

cat /proc/<pid>/environ

実行中の特定の実行可能ファイルの pid が必要な場合は、pidof を使用できます。 :

AlberT$ pidof sshd   
30690 6512 

編集 :

出力を読みやすくするために、Dennis Williamson と Teddy のコメントを完全に引用します。私の解決策は次のとおりです。

tr '\0' '\n' < /proc/<pid>/environ

解決策 2:

この質問には unix があるため タグと他の誰もが linux に対処する素晴らしい仕事をしました タグを使用して、OS X およびその他の BSD 派生システムでこの情報を取得できます

ps -p <PID> -wwwe

または

ps -p <PID> -wwwE

およびSolarisでは

/usr/ucb/ps -wwwe <PID>

Solaris は /proc もサポートしています あいまいな ps を覚えたくない場合は、ディレクトリ コマンド。

解決策 3:

他の人が言及しているように、Linux では /proc を調べることができますが、カーネルのバージョンに応じて、1 つまたは 2 つの制限があります。

まず、environ ファイルには、プロセスが生成されたときの環境が含まれています。つまり、プロセスがその環境に対して行った可能性のある変更は、/proc:には表示されません。

$ cat /proc/$$/environ | wc -c
320
$ bash
$ cat /proc/$$/environ | wc -c
1270
$ 

最初のシェルはログイン シェルであり、最初は非常に限られた環境しかありませんが、ソースによって拡張されます。 .bashrc ですが、/proc にはこれが反映されません。 2 番目のシェルは、より大きな環境を最初から継承するため、/proc に表示されます。

また、古いカーネルでは、environ ファイルの内容はページ サイズ (4K) に制限されています。

$ cat /proc/$$/environ | wc -c
4096
$ env | wc -c
10343
$ 

2.6.9 (RHEL4) と 2.6.18 (RHEL5) の間のどこかで、この制限は削除されました...

解決策 4:

これを行うための BSD オプションの正しい使用法 (少なくとも Linux では):

ps e $pid

または

ps auxe  #for all processes

はい、ps のマンページはかなり紛らわしいです。(via)

解決策 5:

かなりまばらに文書化されていますが、 /proc/<pid>/environ の内容は プロセスの開始に使用された環境のみが含まれます。

プロセス環境の現在の状態を検査する必要がある場合、その方法の 1 つは gdb を使用することです。 .

# Start gdb by attaching it to a pid or core file
gdb <executable-file> <pid or core file>

# Run the following script to dump the environment
set variable $foo = (char **) environ
set $i = 0
while ($foo[$i] != 0)
print $foo[$i++]
end

Linux
  1. どのプロセスにPid0がありますか?

  2. * in * / etc / environment?で環境変数を参照する

  3. UNIX/Linux システムで実行中のプロセスにコマンドライン引数を渡す方法は?

  1. Linux コンソールと ssh セッションで実行されているかどうかを確認する方法は?

  2. 環境変数の確認

  3. 一時的な環境を設定する ($PATH)

  1. cURL コマンドでの環境変数の使用 - Unix

  2. 多くの環境変数の設定を解除する方法

  3. Docker コンテナー内で実行されているプロセスの、ホストの PID は何ですか?