/proc/[pid]/environ を見てプロセスの環境変数を確認する


/proc/[pid]/environ を見てプロセスの環境変数を確認した時のメモ

どうやってプロセスの環境変数を確認するのか

/proc/[pid]/environ というファイルを確認する事で確認出来るようなのでこちらを見てみる。

man proc

/proc/[pid]/environ
This file contains the initial environment that was set when the currently executing program was started via execve(2).
The entries are separated by null bytes ('\0'), and there may be a null byte at the end. Thus, to print out the environment of process 1, you would do:
$ cat /proc/1/environ | tr '\000' '\n'

やってみる

docker ではこんな感じで環境変数を設定できるのでこれを利用して確認。

ENV (environment variables)

$docker run -e "deep=purple" --rm alpine env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=d24d530dff8b
deep=purple
HOME=/root

では実際にやってみる。
/proc を使って確認してみる。

# deep=purple という環境変数を設定してコンテナ(プロセス)を起動
$docker run -e "deep=purple" -d alpine sleep 10000
a4868f4b60d7fb3df4ab3c8aad11f75c3a5c144db61f5692981629c7ef8b745d

# PID を確認
$docker inspect a4868f4b60d7fb3df4ab3c8aad11f75c3a5c144db61f5692981629c7ef8b745d |grep Pid
            "Pid": 30787,
            "PidMode": "",
            "PidsLimit": 0,

# 設定した環境変数が確認出来る
$sudo cat /proc/30787/environ | tr '\000' '\n'
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=a4868f4b60d7
deep=purple
HOME=/root

便利。
コンテナでなくても psコマンドなどで PID を特定し、環境変数を確認する事ができそう。

/proc/[pid]/ 配下はプロセスの様々な情報が確認できそう。