列出 AIX 上正在运行的进程的环境变量(无字符限制)

列出 AIX 上正在运行的进程的环境变量(无字符限制)

今天我尝试调试一个问题,即某个进程没有拾取正确的环境变量。我们花了几个小时才意识到它没有拾取正确的变量。

我尝试使用此处的解决方案列出它们:https://serverfault.com/a/104175/90224ps eww [pid]),但字符数限制似乎为 3155 个字符,这对于特定应用程序来说远远不够。(此时它甚至还没有打印完命令行选项)

在 AIX 上我可以使用其他方法来找到它吗?我是一名软件开发人员,所以我也不介意需要一点代码的解决方案。

答案1

好吧,还有一个w应该根据手册页获取所有内容:

ewww

从 e 标志开始换行显示并显示ENV列表直到达到该INT_MAX值。

这是一个相当大的限制。

如果你正在考虑创建自己的工具,你应该看看getevarsgeteargsps用于显示的功能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;
}

相关内容