Cada processo tem seu próprio ambiente, copiado do pai . Se o pai é um shell, há um conceito de variáveis exportáveis que precisa ser considerado, mas isso não se aplica quando você está lidando diretamente com exec()
etc. A variável LOGNAME
é normalmente definida por um shell de login, você está vendo apenas um valor restante que não foi redefinido. Então, você está vendo o ambiente filho. Em alguns sistemas, você não pode acessar facilmente o ambiente pai (ou outro processo), no Linux, você pode fazer isso facilmente (sujeito a permissões) via /proc
)
Provavelmente você pode reproduzir o efeito que você está experimentando su
e su -
, este último inicializará um ambiente de login de shell que (quase certamente) redefinirá LOGNAME
entre outras coisas, o primeiro o deixará intocado.
Usar o comando env
é uma maneira de obter um ambiente limpo ao iniciar um novo processo a partir de uma linha de comando, você deve verificar a documentação execle()
em seu sistema para ver como fazer algo semelhante.