web-dev-qa-db-ja.com

文字制限なしでAIXで実行中のプロセスの環境変数をリストします

今日、私はプロセスが正しい環境変数を取得していない問題をデバッグしようとしていました。正しい変数を取得していないことに気付くまでに数時間かかりました。

私はここの解決策を使用してそれらをリストしようとしました: https://serverfault.com/a/104175/90224ps eww [pid])ですが、3155文字程度の文字数制限があるようです。これは、特定のアプリケーションには十分ではありません。 (その時点では、コマンドラインオプションの印刷も完了していません)

それを見つけるためにAIXで使用できる別の方法はありますか?私はソフトウェア開発者なので、少しのコードが必要なソリューションでもかまいません。

2
user606723

さて、もう1つwを使用すると、manページに従ってshouldすべてを取得する必要があります。

ewww

Eフラグから表示をラップし、INT_MAX値に達するまでENVリストを表示します。

それはかなり大きな制限です。

このためのツールを自分で作成することを検討している場合は、getevarsgeteargs表示に使用する ps および ewww 関数を調べる必要があります。

getevarsのナイーブな使用法は次のとおりです。独自の環境を出力します(制限は約1Mb)。

#include <sys/types.h>
#include <procinfo.h>
#include <unistd.h>
#include <stdio.h>

#define ENV_MAX (1024*1024)

int main(void)
{
    struct procentry64 pe;
    char buffer[ENV_MAX];
    pe.pi_pid = getpid();
    int rc = getevars(&pe, sizeof(pe), buffer, sizeof(buffer));
    if (rc != 0) {
        perror("getevars");
        return 1;
    }
    buffer[ENV_MAX-2] = buffer[ENV_MAX-1] = 0;
    char *cur = buffer;
    char *end = buffer+sizeof(buffer);
    while ((*cur) && (cur < end)) {
        int len = puts(cur);
        cur += len;
    }
    return 0;
}
1
Mat