Solución 1:
cat /proc/<pid>/environ
Si desea tener pid (s) de un ejecutable en ejecución dado, puede, entre otras posibilidades, usar pidof
:
AlberT$ pidof sshd
30690 6512
EDITAR :
Cito totalmente los comentarios de Dennis Williamson y Teddy para lograr un resultado más legible. Mi solución es la siguiente:
tr '\0' '\n' < /proc/<pid>/environ
Solución 2:
Dado que esta pregunta tiene un unix tag y todos los demás han hecho un gran trabajo al abordar linux etiqueta, puede obtener esta información en OS X y otros sistemas derivados de BSD usando
ps -p <PID> -wwwe
o
ps -p <PID> -wwwE
y en Solaris con
/usr/ucb/ps -wwwe <PID>
Solaris también es compatible con /proc
directorio si no quiere recordar el oscuro ps
comando.
Solución 3:
Como han mencionado otros, en Linux, puede buscar en /proc pero, dependiendo de la versión de su kernel, existen uno o dos límites:
En primer lugar, el archivo de entorno contiene el entorno tal como se veía cuando se generó el proceso. Eso significa que cualquier cambio que el proceso haya realizado en su entorno no será visible en /proc:
$ cat /proc/$$/environ | wc -c
320
$ bash
$ cat /proc/$$/environ | wc -c
1270
$
El primer shell es un shell de inicio de sesión e inicialmente tiene un entorno muy limitado, pero lo hace crecer mediante el abastecimiento, p. .bashrc pero /proc no refleja esto. El segundo shell hereda el entorno más grande desde el principio, por lo que se muestra en /proc.
Además, en kernels más antiguos, el contenido del archivo de entorno está limitado a un tamaño de página (4K):
$ cat /proc/$$/environ | wc -c
4096
$ env | wc -c
10343
$
En algún lugar entre 2.6.9 (RHEL4) y 2.6.18 (RHEL5), se eliminó este límite...
Solución 4:
uso correcto de las opciones de BSD para hacer esto (al menos en Linux):
ps e $pid
o
ps auxe #for all processes
y sí, la página de manual de ps es bastante confusa. (vía)
Solución 5:
Aunque escasamente documentado, el contenido de /proc/<pid>/environ
solo contendrá el entorno que se utilizó para iniciar el proceso.
Si necesita inspeccionar el estado actual del entorno de un proceso, una forma de hacerlo es usando gdb
.
# Start gdb by attaching it to a pid or core file
gdb <executable-file> <pid or core file>
# Run the following script to dump the environment
set variable $foo = (char **) environ
set $i = 0
while ($foo[$i] != 0)
print $foo[$i++]
end