Como posso obter as seguintes informações para um processo Linux em execução:
- variáveis de ambiente shell
- diretório de trabalho
- opções de linha de comando
Responder1
Você pode obter essas informações em/procsistema de arquivos, ele armazena informações sobre processos em execução.
cat /proc/<pid>/environ
cd /proc/<pid>/cwd; pwd -P
cat /proc/<pid>/cmdline
Responder2
Se você gerar o ambiente conforme sugerido por @atype, obterá todas as variáveis de ambiente e seus valores concatenados sem separador.
Para melhor saída, use
$ xargs -0 -L 1 echo < /proc/21645/environ
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
SHELL=/bin/bash
TERM=xterm
LC_MESSAGES=en_US.UTF-8
LANGUAGE=en_US.UTF-8
(saída abreviada por motivos de privacidade)
Explicação
/proc/$pid/environ contém as variáveis de ambiente como uma lista separada por nulos.
xargs é uma ferramenta para ler uma lista arbitrariamente longa de *STDIN e alimentar seus elementos para uma ferramenta (eco neste caso) garantindo não exceder o comprimento máximo da linha de comando. O parâmetro "-0" alterna xargs para usar nulo como separador de item (em vez do espaço em branco ou nova linha padrão). O parâmetro "-L 1" limita o número de itens a 1. Assim, cada variável de ambiente é gerada em uma nova linha.