0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

あるプロセスの環境変数を知る

Last updated at Posted at 2023-07-28

最近ちょっとした必要に迫られ、あるプロセスの環境変数を取得することになりました

結論

/proc/PID/environ にそのプロセスの持っている環境変数がセットされています

注意事項

各環境変数のKEY=VALUEをNULL文字で結合したものとなっています
つまりそのままだとあまり取り回しが良くありません

/proc/PID/environの内容を改行区切りで出力する

使い勝手の良い改行区切りのリストを出力するためのスクリプトを用意します

process-env
#!/usr/bin/python3

import os
import sys
import shlex
import re

try:
  with open(f"/proc/{sys.argv[1]}/environ") as f:
    content = f.read();
    envList = content.split("\0")
    pattern = "([^=]+)=(.*)"
    repatter = re.compile(pattern);

    for envLine in envList:
      result = repatter.match(envLine)

      if not result:
        continue

      key = result.group(1)
      value = shlex.quote(result.group(2))
      print(f"{key}={value}")

except FileNotFoundError:
  os._exit(status=255)

エラー処理とか適当ですが
これで process-env 1 とかやると指定したプロセスIDの(起動時に)持っている環境変数を取得できるようになりました

雑感

ググったらシェルスクリプトで strings /proc/PID/environ で取れるような記事もありましたが、この場合だと値に $ が含まれる場合に、それをそのままexportするような形にした際にシェルの変数として解釈されてしまいます
$ という文字として解釈したいのでエスケープするためにpythonでshlex.quoteを使ってエスケープするスクリプトを用意しました
phpでescapeshellarg()を使っても良いでしょう

これで無事にあるプロセスが持つ環境変数を取得して利用することが出来るようになりました


それでは良いLinuxライフを

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?