Сегодня я пытался отладить проблему, когда процесс не выбирал правильную переменную окружения. Нам потребовались часы, прежде чем мы поняли, что это не та переменная.
Я попытался перечислить их, используя решение здесь: https://serverfault.com/a/104175/90224 (ps eww [pid]
), но, похоже, он имеет ограничение на количество символов примерно в 3155 символов, что даже близко к достаточному количеству символов для конкретного приложения. (На этом этапе параметры командной строки еще не выводились)
Есть ли другой метод, которым я могу его найти в AIX? Я разработчик программного обеспечения, поэтому я бы тоже не возражал против решения, требующего немного кода.
Ну, еще с одним w
ты должен получить все это согласно странице руководства:
ewww
Переносит отображение флажка e и отображает
ENV
список, пока он не достигнетINT_MAX
стоимость.
Это довольно большой предел.
Если вы хотите создать инструменты для этого, вам следует изучить getevars
и geteargs
функции, которые ps
использует для ewww
дисплей.
Вот наивное использование getevars
, выводит собственное окружение (ограничение ~ 1Мб):
#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;
}