があるので、読みの環境変数のその他のプロセスを使用Perl、Linux、Solarisのでしょうか。

StackOverflow https://stackoverflow.com/questions/518803

質問

Perlながらプレーする必要がありますの環境その他のプロセス。

  • のスクリプトが実行さ根 特典をご利用いただけます。
  • スクリプトにする 両方を走るLinuxおよびSolaris.
  • いうソリューションの主platform agnostic、少なくとも間には、LinuxおよびSolaris.Linuxでは、検討を行/env/<proc_id>/環境での私の答えです。
  • たいと思いる必要性を回避するためにforkします。すでに持っている溶液の分岐"/usr/ユーシービージャパン/ps-auxwwwe$pid"

そのアイデア?

役に立ちましたか?

解決

Solarisの場合、あなたはCPANからのprocfsモジュールを試みることができますに。このモジュールはまだ非常に若いと思われるにもかかわらず、この引用は有望な音ます:

  

ブライアン・ファレルは、ハンドルに非常に便利なパッチを送りました   ARGVの検査やプロセスの環境   現在実行中のプロセス以外ます。

私はこれが(ちょうどLinuxでenvironファイルなど)だけで初期環境おそらくであることを想像し、それはあなたが望むもののようだ?

私はあなたを参照してくださいが、

そうでなければ、あなたは、簡単な解決策は、おそらくLinuxだけの、完全に同等としてSolaris上で環境を出してくれる小さなプログラムを生成するためにCの〜20行をクランクするでしょうフォークしたくないと言いますenvironファイル。私はすでにCで非常によく似た何かを持っています。あなたが興味を持っている場合、私はそれを投稿することができます。

EDIT(OpenSolarisのpargs.cを読んだ後):環境の変化は、psinfoポインタは無効とすることができるようにするとき、環境バッファは、Solarisの下に再割り当てされます。防弾ソリューションについて、あなたは_environを追い詰めるする必要があります。それはあなたがが、フォークのルートを行く場合pargs -e <pid>は、UCBのps(1)へのよりよい代替かもしれません...すべておそらくあなたが必要以上面倒だ。

他のヒント

/proc/<pid>/environのpsuedofilesは、プロセスが作成されたときに渡された環境変数が含まれているように、

Linuxではそれが見えます。あなたが十分な権限を持っている場合は、それらを読むことができます。

彼らは打ち上げ後のプロセス環境の変化を追跡するためには表示されません。

それはあなたがあなたが求めているものを手に入れるためにプロセスのメモリダンプをdisectしなければならないことを示唆しています。

トリッキーます。

GNU 'のbinutils' パッケージはstringsと呼ばれるCLIユーティリティが含まれています。詳細は http://www.gnu.org/software/binutils/ のを参照してください。

strings /proc/pid/environは - ずっとenvのような環境変数の素敵なリストを出力します。

私の心に来る最初の事はに接続するGDBを使用しています 問題のプロセスは、その後の環境を得るためにGDBを求めて 君は。あなたはGDBに「ショー環境」コマンドを使用してこれを行うことができます シェルます。

あなたのためにこれを行うことができますPerlモジュールがあるように

に見えます、 のDevel :: GDBする。私はそうではありません まだそれを試してみましたが、それはにプログラミングだけの簡単な作業のように見えます Develの:: GDBオブジェクトを作成し、あなたがしたいプロセスに接続 点検、「ショー環境」コマンドを送信し、その後、解析 結果ます。

私は解決策は、この複雑であるとき、...しかし、あなたが言っているん おそらく間違って何かをやっています。なぜあなたは必要ですか ランダムプロセスの環境、とにかく?

PSはそれを行うことができれば、あなたが言うように、

、、その後、あなたの答えは、psのソースコードのどこかに見つけることができます。それは、新しいプロセスの産卵を避けるだろう。

Linuxでは、それは/proc/[pid]/cwdのシンボリックリンクを解決するのに十分であり、

のprocfs(5)。

scroll top