Listar variáveis de ambiente de um processo em execução no AIX sem limite de caracteres

2

Hoje eu estava tentando depurar um problema em que um processo não estava pegando a variável ambiental correta. Demorou horas antes de percebermos que não estava pegando a variável correta.

Eu tentei listá-los usando a solução aqui: link ( ps eww [pid] ), mas parece ter um limite de caracteres de algo como 3155 caracteres, o que não é nem perto do suficiente para o aplicativo específico. (Não é mesmo feito imprimir as opções de linha de comando nesse ponto)

Existe outro método que eu possa usar no AIX para encontrá-lo? Eu sou um desenvolvedor de software, então eu não me importaria com uma solução que exigisse um pouco de código também.

    
por user606723 22.03.2013 / 19:47

1 resposta

1

Bem, com mais um w você deve obter tudo de acordo com a página do manual:

ewww

Wraps display from the e flag and displays the ENV list until it reaches the INT_MAX value.

Esse é um limite muito grande.

Se você está pensando em criar ferramentas para isso, você deve procurar no getevars e geteargs funções que ps usa para a exibição ewww .

Aqui está um uso ingênuo de getevars , imprime seu próprio ambiente (limite ~ 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;
}
    
por 24.07.2013 / 17:20