Necesito solucionar algunos problemas relacionados con las variables de entorno en un sistema Unix.
En Windows, puedo usar una herramienta como ProcessExplorer para seleccionar un proceso particular y ver los valores de cada variable de entorno.
¿Cómo puedo lograr lo mismo en Unix? echoing
y env
cmd solo muestran valores en este momento, pero quiero ver qué valores está usando el proceso en ejecución actualmente.
Respuestas:
Si desea tener pid (s) de un ejecutable ejecutado dado, puede, entre otras posibilidades, usar
pidof
:EDITAR :
Cito totalmente los comentarios de Dennis Williamson y Teddy para lograr una salida más legible. Mi solución es la siguiente:
fuente
cat /proc/17330/environ | tr \\0 \\n
xargs --null --max-args=1 echo < /proc/PID/environ
/proc
sistema de archivos no es portátil.xargs
para convertir nulos a nuevas líneas es mejor que usartr
. ¿Alguien me lo puede dejar? Gracias.Dado que esta pregunta tiene una etiqueta de Unix y todos los demás han hecho un gran trabajo al abordar la etiqueta de Linux , puede obtener esta información sobre OS X y otros sistemas derivados de BSD utilizando
o
y en Solaris con
Solaris también admite el
/proc
directorio si no desea recordar el oscurops
comando.fuente
ps -p <PID> -wwE
./proc/PID/environ
. Esos archivos solo pueden ser leídos por el propietario del proceso.Como otros han mencionado, en Linux, puede buscar en / proc pero existen, según la versión de su núcleo, uno o dos límites:
En primer lugar, el archivo 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:
El primer shell es un shell de inicio de sesión e inicialmente tiene un entorno muy limitado, pero lo crece obteniendo, por ejemplo, .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 núcleos más antiguos, el contenido del archivo ambiental está limitado a un tamaño de página (4K):
En algún lugar entre 2.6.9 (RHEL4) y 2.6.18 (RHEL5) este límite se eliminó ...
fuente
Uso correcto de las opciones de BSD para hacer esto (al menos en Linux):
o
y sí, la página de manual de ps es bastante confusa. ( vía )
fuente
ps eww $pid
soluciones al segundo problema.xargs
otr
convertirlas a nuevas líneas para facilitar la lectura. Probablemente te hayas dado cuenta de esto en los cuatro años transcurridos.reemplace PID con el PID del proceso que desea ver. Toda la información sobre un proceso en ejecución se encuentra en el directorio / proc / PID /
ejemplo: cat / proc / 32512 / environmental
fuente
Tomado de la wiki de Archlinux :
Puede crear una función temporal para analizar los valores
/proc/<pid>/environ
. En el indicador de terminal:Luego, con el pid del proceso que desea, simplemente use:
fuente
En Linux, intentaría echar un vistazo a
fuente
Para Solaris 5.10, esto funciona:
fuente
Si bien está 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 mediante el uso
gdb
.fuente
Y como mi trabajo me hace ser un fanático de AIX, no olvidemos:
O como lo llama la página del manual, "Berkeley Standards".
Por alguna razón, / proc / PID / environment no existe en AIX.
fuente
Si desea crear formato
env
como salida de las variables de entorno para un proceso arbitrario (PID), puede crear unpenv <pid>
comando bash conveniente (adaptado a su sistema operativo) y agregarlo a su.bashrc
:Linux agregue esto a su ~ / .bashrc:
macOS / BSD agregue esto a su ~ / .bashrc:
Solaris agregue esto a su ~ / .bashrc:
Uso:
fuente
Una solución mac, probablemente otros BSD también podrían ser algo así como
Las variables de entorno se agregan a la línea de comando, esto elimina la línea de comando y solo nos quedan las variables de entorno.
No es perfecto porque están separados por espacios no separados por LF
fuente
/ proc / PID / ambient
para esto, primero debemos identificar el PID del proceso. para esto puedes usar el comando ps
fuente