GNU/Linux >> Tutoriales Linux >  >> Linux

¿Variables de entorno de un proceso en ejecución en Unix?

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

Linux
  1. Ejecutando sqlplus en segundo plano en Unix

  2. Establecer un entorno temporal ($PATH)

  3. Uso de variables de entorno en el comando cURL - Unix

  4. Cómo desarmar muchas variables de entorno

  5. ¿Cuál es el PID en el host de un proceso que se ejecuta dentro de un contenedor Docker?

Procesos corriendo

¿Qué proceso tiene Pid 0?

Variables de entorno de Linux

¿Cómo saber si se ejecuta en una consola de Linux frente a una sesión de ssh?

Comprobación de variables de entorno

¿Las variables de entorno son visibles para usuarios sin privilegios en Linux?