Ele é atualizado à medida que o processo adquire / exclui suas variáveis de ambiente. Você tem uma referência que declara que o arquivo environ
não está atualizado para o processo em seu diretório de processos sob o sistema de arquivos / proc?
xargs --null --max-args=1 echo < /proc/self/environ
ou
xargs --null --max-args=1 echo < /proc/<pid>/environ
ou
ps e -p <pid>
O texto acima irá imprimir as variáveis de ambiente do processo no formato ps
, processamento de texto (análise / filtragem) é necessário para ver as variáveis de ambiente como uma lista.
Solaris (não solicitado, mas para referência eu vou postar aqui):
/usr/ucb/ps -wwwe <pid>
ou
pargs -e <pid>
EDITAR: / proc / pid / environ não é atualizado! Eu estou corrigido. O processo de verificação está abaixo.
No entanto, os filhos dos quais o processo é fork'd herdam a variável de ambiente de processo e ela é visível em seus respectivos arquivos / proc / self / environ. (Use strings)
Com o shell: aqui xargs é um processo filho e, portanto, herda a variável de ambiente e também reflete em seu arquivo /proc/self/environ
.
[centos@centos t]$ printenv | grep MASK
[centos@centos t]$ export MASK=NIKHIL
[centos@centos t]$ printenv | grep MASK
MASK=NIKHIL
[centos@centos t]$ xargs --null --max-args=1 echo < /proc/self/environ | grep MASK
MASK=NIKHIL
[centos@centos t]$ unset MASK
[centos@centos t]$ printenv | grep MASK
[centos@centos t]$ xargs --null --max-args=1 echo < /proc/self/environ | grep MASK
[centos@centos t]$
Verificando a partir de outra sessão, onde o terminal / sessão não é o processo filho do shell em que a variável de ambiente está configurada.
Verificando de outro terminal / sessão no mesmo host:
terminal1: : Observe que printenv é fork'd e é um processo filho de bash e, portanto, ele lê seu próprio arquivo environ.
[centos@centos t]$ echo $$
2610
[centos@centos t]$ export SPIDEY=NIKHIL
[centos@centos t]$ printenv | grep SPIDEY
SPIDEY=NIKHIL
[centos@centos t]$
terminal2: no mesmo host - não inicie com o mesmo shell onde a variável acima foi definida, inicie o terminal separadamente.
[centos@centos ~]$ echo $$
4436
[centos@centos ~]$ xargs --null --max-args=1 echo < /proc/self/environ | grep -i spidey
[centos@centos ~]$ strings -f /proc/2610/environ | grep -i spidey
[centos@centos ~]$ xargs --null --max-args=1 echo < /proc/2610/environ | grep -i spidey
[centos@centos ~]$