Como obter variáveis ambientais de um processo muito curto?

2

Eu tenho um processo muito curto para o qual eu quero verificar as variáveis ambientais para fins de depuração. O processo é instantâneo de uma perspectiva humana. O exemplo ilustra melhor.

Exemplo

user:~$ ps aux | grep grep
user   2349  0.0  0.0   4384   840 pts/1    S+   14:47   0:00 grep --color=auto grep

O pid do processo foi 2349. Se eu verificar as variáveis ambientais (ou outras informações):

#Pretty print of environmental variables#
user:~$ xargs --null --max-args=1 echo < /proc/2349/environ
bash: /proc/2349/environ: No such file or directory

A informação desapareceu com o processo.

O que fazer antes de executar o processo para poder listar as variáveis quando o processo estiver concluído?

    
por TheMeaningfulEngineer 15.07.2013 / 15:01

2 respostas

5

se você tiver strace

strace -v -e execve cmd

Se os valores das variáveis forem muito longos, você poderá aumentar o tamanho da string com -s

strace -v -s 10000 -e execve cmd
    
por 15.07.2013 / 19:09
5

Gostaria de mover o binário para um lado e criar um wrapper que despeja o ambiente em um arquivo e, em seguida, chama o original.

Por exemplo,

mv ${cmd} ${cmd}.moved

Em seguida, crie um novo arquivo ${cmd} :

#!/bin/sh
env > /tmp/cmd-env.log
exec ${cmd}.moved "$@"

E não esqueça as permissões:

chmod a+rx ${cmd}

Em seguida, espere que ele seja executado novamente e leia o ambiente em /tmp/cmd-env.log .

Por fim, coloque o programa original de volta de onde veio:

mv ${cmd}.moved ${cmd}

Naturalmente, pode ser possível evitar mover o binário colocando o wrapper em outro diretório bin anteriormente em $PATH .

    
por 15.07.2013 / 15:16