Solution 1 :
cat /proc/<pid>/environ
Si vous voulez avoir le(s) pid(s) d'un exécutable en cours d'exécution, vous pouvez, parmi un certain nombre d'autres possibilités, utiliser pidof
:
AlberT$ pidof sshd
30690 6512
MODIFIER :
Je cite totalement les commentaires de Dennis Williamson et Teddy pour obtenir un résultat plus lisible. Ma solution est la suivante :
tr '\0' '\n' < /proc/<pid>/environ
Solution 2 :
Puisque cette question a un unix tag et tout le monde a fait un si bon travail sur linux tag, vous pouvez obtenir ces informations sur OS X et d'autres systèmes dérivés de BSD en utilisant
ps -p <PID> -wwwe
ou
ps -p <PID> -wwwE
et sur Solaris avec
/usr/ucb/ps -wwwe <PID>
Solaris prend également en charge le /proc
répertoire si vous ne voulez pas vous souvenir de l'obscur ps
commande.
Solution 3 :
Comme d'autres l'ont mentionné, sous Linux, vous pouvez regarder dans /proc mais il y a, selon la version de votre noyau, une ou deux limites :
Tout d'abord, le fichier environ contient l'environnement tel qu'il était lorsque le processus a été généré. Cela signifie que toute modification que le processus aurait pu apporter à son environnement ne sera pas visible dans /proc :
$ cat /proc/$$/environ | wc -c
320
$ bash
$ cat /proc/$$/environ | wc -c
1270
$
Le premier shell est un shell de connexion et a initialement un environnement très limité mais le développe en s'approvisionnant par ex. .bashrc mais /proc ne reflète pas cela. Le deuxième shell hérite de l'environnement plus large dès le début, c'est pourquoi il s'affiche dans /proc.
De plus, sur les noyaux plus anciens, le contenu du fichier environ est limité à une taille de page (4K) :
$ cat /proc/$$/environ | wc -c
4096
$ env | wc -c
10343
$
Quelque part entre 2.6.9 (RHEL4) et 2.6.18 (RHEL5) cette limite a été supprimée...
Solution 4 :
utilisation correcte des options BSD pour ce faire (au moins sous Linux) :
ps e $pid
ou
ps auxe #for all processes
et oui, la page de manuel ps est assez déroutante. (via)
Solution 5 :
Bien que peu documenté, le contenu de /proc/<pid>/environ
ne contiendra que l'environnement qui a été utilisé pour démarrer le processus.
Si vous avez besoin d'inspecter l'état actuel de l'environnement d'un processus, une façon de le faire est d'utiliser 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