245 votes

Les variables d'environnement d'un processus en cours d'exécution sous Unix ?

Je dois résoudre des problèmes liés aux variables d'environnement sur un système Unix.

Sous Windows, je peux utiliser un outil tel que ProcessExplorer pour sélectionner un processus particulier et afficher les valeurs de chaque variable d'environnement.

Comment puis-je accomplir la même chose sous Unix ? echoing y env cmd n'affiche que les valeurs actuelles, mais je veux voir les valeurs que le processus en cours utilise actuellement.

3 votes

Même si /proc/<pid>/environ a une taille de 0, il y a toujours des informations dedans. "Cela a plus de sens si vous le considérez comme une fenêtre dans le noyau. Le fichier ne contient pas réellement de données ; il agit simplement comme un pointeur vers l'endroit où résident les informations réelles du processus. " [[source](http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html) ]

4voto

clearlight Points 153

Si vous voulez créer des env comme la sortie des variables d'environnement pour un processus arbitraire (PID), vous pouvez créer une commande bash pratique penv <pid> (adaptée à votre système d'exploitation) et ajoutez-la à votre fichier .bashrc :

Linux ajoutez ceci à votre ~/.bashrc :

penv () { 
    xargs --null --max-args=1 < /proc/$1/environ
}

macOS / BSD ajoutez ceci à votre ~/.bashrc :

penv() {
   ps eww -o command $1  | tr ' ' '\n'
}

Solaris ajoutez ceci à votre ~/.bashrc :

penv() {
   pargs -e $1
}

Utilisation :

$ source $HOME/.bashrc
$ pgrep VBoxSVC
10268
$ penv 10268
SSH\_CONNECTION=1.1.1.242 53960 1.1.1.91 22
GREP\_COLORS=sl=49;39:cx=49;39:mt=49;38;5;167;1:fn=49;39;1:ln=49;39:bn=49;39:se=50;39
LANG=en\_US.UTF-8
EDITOR=vim
XDG\_SESSION\_ID=106
USER=root
PWD=/root
HOME=/root
SSH\_CLIENT=1.1.1.242 53960 22
SSH\_TTY=/dev/pts/3
MAIL=/var/mail/root
TERM=xterm-256color
SHELL=/bin/bash
SHLVL=1
LOGNAME=root
DBUS\_SESSION\_BUS\_ADDRESS=unix:path=/run/user/0/bus
XDG\_RUNTIME\_DIR=/run/user/0
PATH=/root/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:.
VBOX\_LOG\_FLAGS=thread tsc
VBOX\_LOG=-all+dev\_vmm\_backdoor.e.l.f+dev\_vmm.e.l.f

0voto

Erik Martino Points 113

Une solution pour Mac, et probablement pour d'autres BSD également, pourrait être quelque chose comme

pid=28369; ps e $pid | cut -c$(expr 1 + $(ps p $pid|tail +2|wc -c))-

Les variables d'environnement sont ajoutées à la ligne de commande, ce qui supprime la ligne de commande et il ne reste que les variables d'environnement.

Ce n'est pas parfait parce qu'ils sont séparés dans l'espace et non dans les LF.

-1voto

varun Points 1

/proc/PID/environ

Pour cela, nous devons d'abord identifier le PID du processus. Pour cela, vous pouvez utiliser la commande ps

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X