GNU/Linux >> Tutoriels Linux >  >> Linux

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

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

Linux
  1. Référencer les variables d'environnement *dans* /etc/environment ?

  2. Existe-t-il un moyen de modifier les variables d'environnement d'un autre processus sous Unix ?

  3. Comment faire passer les arguments de ligne de commande à un processus en cours d'exécution sur les systèmes unix/linux ?

  4. Comment savoir s'il s'exécute dans une console Linux par rapport à une session ssh ?

  5. Vérification des variables d'environnement

Processus en cours d'exécution

Changer l'environnement d'un processus en cours ?

Quel processus a le Pid 0 ?

Variables d'environnement Linux

Les variables d'environnement sont-elles visibles pour les utilisateurs non privilégiés sous Linux ?

Les fichiers .pid sont-ils fiables pour déterminer si un processus est en cours d'exécution ?