Перечислите переменные окружения запущенного процесса в AIX без ограничения символов

Сегодня я пытался отладить проблему, когда процесс не выбирал правильную переменную среды. Нам потребовались часы, прежде чем мы поняли, что это не подбирает правильную переменную.

Я попытался перечислить их, используя решение здесь: /questions/647333/peremennyie-sredyi-zapuschennogo-protsessa-v-unix/647353#647353 (ps eww [pid]), но, похоже, ограничение на количество символов составляет около 3155 символов, что недостаточно для конкретного приложения. (Это даже не печать параметров командной строки на этом этапе)

Есть ли другой способ, который я могу использовать в AIX, чтобы найти его? Я разработчик программного обеспечения, поэтому я не возражаю против решения, требующего также немного кода.

1 ответ

Ну, с еще одним w Вы должны получить все это в соответствии с man-страницей:

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;
}
Другие вопросы по тегам