J'ai besoin de résoudre certains 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 et afficher les valeurs de chaque variable d’environnement.
Comment puis-je accomplir la même chose sous Unix? echoing
et env
cmd affichent simplement les valeurs à l'heure actuelle, mais je souhaite afficher les valeurs actuellement utilisées par le processus en cours.
Réponses:
Si vous voulez avoir des pid (s) d’un exécutable en cours, vous pouvez, parmi un certain nombre de possibilités, utiliser
pidof
:EDIT :
Je cite totalement les commentaires de Dennis Williamson et Teddy pour obtenir une sortie plus lisible. Ma solution est la suivante:
la source
cat /proc/17330/environ | tr \\0 \\n
xargs --null --max-args=1 echo < /proc/PID/environ
/proc
système de fichiers n'est pas portable.xargs
pour convertir des valeurs NULL en nouvelles lignes est préférable à une utilisationtr
. Est-ce que quelqu'un peut me le présenter? Merci.Puisque cette question a une balise unix et que tout le monde a fait un travail remarquable en adressant une balise linux , vous pouvez obtenir ces informations sur OS X et d'autres systèmes dérivés de BSD en utilisant
ou
et sur Solaris avec
Solaris prend également en charge le
/proc
répertoire si vous ne souhaitez pas vous souvenir de la commande obscureps
.la source
ps -p <PID> -wwE
./proc/PID/environ
. Ces fichiers ne sont lisibles que par le propriétaire du processus.Comme d'autres l'ont mentionné, sous Linux, vous pouvez consulter / proc, mais il existe, en fonction de la version de votre noyau, une ou deux limites:
Tout d'abord, le fichier environ contient l'environnement tel qu'il était lors de la génération du processus. Cela signifie que toute modification apportée par le processus à son environnement ne sera pas visible dans / proc:
Le premier shell est un shell de connexion et a au départ un environnement très limité, mais il est développé par sourcing, par exemple .bashrc, mais / proc ne le reflète pas. Le deuxième shell hérite dès le départ de l’environnement le plus large, ce qui explique pourquoi il apparaît dans / proc.
De plus, sur les noyaux plus anciens, le contenu du fichier environ est limité à une taille de page (4 Ko):
Quelque part entre 2.6.9 (RHEL4) et 2.6.18 (RHEL5), cette limite a été supprimée ...
la source
utiliser correctement les options BSD pour le faire (au moins sur linux):
ou
et oui, ps manpage est assez déroutant. ( via )
la source
ps eww $pid
corrige le 2ème problème.xargs
outr
de convertir ces dernières en nouvelles lignes pour plus de lisibilité. Vous avez probablement compris cela dans les quatre années qui ont suivi.remplacez le PID par le PID du processus que vous voulez voir. Toutes les informations sur un processus en cours sont sous / proc / PID / directory
exemple: cat / proc / 32512 / environ
la source
Tiré du wiki Archlinux :
Vous pouvez créer une fonction temporaire pour analyser les valeurs
/proc/<pid>/environ
. À l'invite du terminal:Ensuite, avec le pid du processus que vous voulez, utilisez simplement:
la source
Sous Linux, je voudrais essayer de regarder
la source
Pour Solaris 5.10, cela fonctionne:
la source
Bien que peu documenté, le contenu de
/proc/<pid>/environ
ne contiendra que l'environnement utilisé pour démarrer le processus.Si vous devez inspecter l'état actuel de l'environnement d'un processus, utilisez l'une des méthodes suivantes
gdb
:la source
Et comme mon travail me rend fan d’AIX, n’oublions pas:
Ou comme l'appelle la page de manuel, "Normes de Berkeley".
Pour une raison quelconque, / proc / PID / environ n'existe pas dans AIX.
la source
Si vous voulez créer une
env
sortie formatée comme la sortie des variables d’environnement pour un processus arbitraire (PID), vous pouvez créer unepenv <pid>
commande commode bash (adaptée à votre système d’exploitation) et l’ajouter à votre.bashrc
:Linux ajoute ceci à votre ~ / .bashrc:
macOS / BSD ajoute ceci à votre ~ / .bashrc:
Solaris ajoute ceci à votre ~ / .bashrc:
Usage:
la source
Une solution mac, probablement d’autres BSD, pourrait ressembler à quelque chose comme:
Les variables d'environnement sont ajoutées à la ligne de commande, cela supprime la ligne de commande et il ne reste plus que les variables d'environnement.
Ce n'est pas parfait car ils sont séparés par un espace et non par une séparation
la source
/ proc / PID / environ
pour cela, nous devons d’abord identifier le PID du processus. pour cela, vous pouvez utiliser la commande ps
la source