今天我尝试调试一个问题,即某个进程没有拾取正确的环境变量。我们花了几个小时才意识到它没有拾取正确的变量。
我尝试使用此处的解决方案列出它们:https://serverfault.com/a/104175/90224(ps eww [pid]
),但字符数限制似乎为 3155 个字符,这对于特定应用程序来说远远不够。(此时它甚至还没有打印完命令行选项)
在 AIX 上我可以使用其他方法来找到它吗?我是一名软件开发人员,所以我也不介意需要一点代码的解决方案。
答案1
好吧,还有一个w
你应该根据手册页获取所有内容:
ewww
从 e 标志开始换行显示并显示
ENV
列表直到达到该INT_MAX
值。
这是一个相当大的限制。
如果你正在考虑创建自己的工具,你应该看看getevars
和geteargs
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;
}