Preciso solucionar alguns problemas relacionados a variáveis de ambiente em um sistema Unix.
No Windows, posso usar uma ferramenta como o ProcessExplorer para selecionar um processo específico e exibir os valores de cada variável de ambiente.
Como posso realizar a mesma coisa no Unix? echoing
e env
cmd apenas mostram valores no momento, mas quero ver quais valores o processo em execução está usando atualmente.
Respostas:
Se você deseja ter o (s) pid (s) de um determinado executável em execução, você pode, entre várias outras possibilidades, usar
pidof
:EDIT :
Cito totalmente os comentários de Dennis Williamson e Teddy para obter uma saída mais legível. Minha solução é a seguinte:
fonte
cat /proc/17330/environ | tr \\0 \\n
xargs --null --max-args=1 echo < /proc/PID/environ
/proc
sistema de arquivos inteiro não é portátil.xargs
para converter nulos em novas linhas é melhor do que usartr
. Alguém pode explicar isso para mim? Obrigado.Como essa pergunta possui uma etiqueta unix e todo mundo fez um ótimo trabalho ao tratar da tag linux , você pode obter essas informações no OS X e em outros sistemas derivados do BSD usando
ou
e no Solaris com
O Solaris também suporta o
/proc
diretório se você não quiser se lembrar dops
comando obscuro .fonte
ps -p <PID> -wwE
./proc/PID/environ
. Esses arquivos são legíveis apenas pelo proprietário do processo.Como outros já mencionaram, no Linux, você pode procurar em / proc, mas existem, dependendo da versão do kernel, um ou dois limites:
Primeiro de tudo, o arquivo do ambiente contém o ambiente como parecia quando o processo foi gerado. Isso significa que quaisquer alterações que o processo possa ter feito em seu ambiente não serão visíveis em / proc:
O primeiro shell é um shell de logon e, inicialmente, possui um ambiente muito limitado, mas aumenta com o fornecimento, por exemplo, .bashrc, mas / proc não reflete isso. O segundo shell herda o ambiente maior desde o início, e é por isso que mostra em / proc.
Além disso, nos kernels antigos, o conteúdo do arquivo do ambiente é limitado ao tamanho da página (4K):
Em algum lugar entre 2.6.9 (RHEL4) e 2.6.18 (RHEL5), esse limite foi removido ...
fonte
uso correto das opções do BSD para fazer isso (pelo menos no Linux):
ou
e sim, a página de manual do ps é bastante confusa. ( via )
fonte
ps eww $pid
corrige o segundo problema.xargs
outr
convertê-las em novas linhas para facilitar a leitura. Você provavelmente percebeu isso nos quatro anos seguintes.substitua o PID pelo PID do processo que você deseja ver. Todas as informações sobre um processo em execução estão no diretório / proc / PID /
exemplo: cat / proc / 32512 / environ
fonte
Retirado do wiki do Archlinux :
Você pode criar uma função temporária para analisar os valores
/proc/<pid>/environ
. No prompt do terminal:Depois, com o pid do processo que você deseja, basta usar:
fonte
No Linux, eu tentaria dar uma olhada
fonte
Para o Solaris 5.10, isso funciona:
fonte
Embora escassamente documentado, o conteúdo de
/proc/<pid>/environ
apenas conterá o ambiente que foi usado para iniciar o processo.Se você precisar inspecionar o estado atual do ambiente de um processo, uma maneira de fazer isso é usando
gdb
.fonte
E como meu trabalho me faz ser um fã do AIX, não vamos esquecer:
Ou como a página de manual chama "Berkeley Standards".
Por qualquer motivo, / proc / PID / environ não existe no AIX.
fonte
Se você deseja criar
env
saída formatada como as variáveis de ambiente para um processo arbitrário (PID), é possível criar umpenv <pid>
comando conveniente do bash (adaptado ao seu sistema operacional) e adicioná-lo ao seu.bashrc
:Linux adicione isso ao seu ~ / .bashrc:
O macOS / BSD adicione isso ao seu ~ / .bashrc:
Solaris adicione isso ao seu ~ / .bashrc:
Uso:
fonte
Uma solução para Mac, provavelmente outros BSDs também podem ser algo como
As variáveis de ambiente são anexadas à linha de comando, isso remove a linha de comando e só temos as variáveis de ambiente restantes.
Não é perfeito porque eles são separados por espaço e não por LF
fonte
/ proc / PID / environ
para isso, primeiro precisamos identificar o PID do processo. para isso você pode usar o comando ps
fonte