Le variables di ambiente di un process in esecuzione su Unix?

Ho bisogno di risolvere alcuni problemi relativi alle variables di ambiente in un sistema Unix.

Su Windows, posso utilizzare uno strumento come ProcessExplorer per select un process particolare e visualizzare i valori di each variabile di ambiente.

Come posso realizzare la stessa cosa su Unix? echoing e env cmd mostrano solo i valori al momento attuale, ma voglio vedere quali valori il process in esecuzione sta utilizzando attualmente.

11 Solutions collect form web for “Le variables di ambiente di un process in esecuzione su Unix?”

 cat /proc/<pid>/environ 

Se vuoi avere pid (s) di un dato eseguibile eseguibile puoi, tra una serie di altre possibilità, utilizzare pidof :

 AlberT$ pidof sshd 30690 6512 

EDIT :

Posso citare totalmente @Teddy commento per get un'output più leggibile:

 xargs --null --max-args=1 < /proc/self/environ 

Poiché questa domanda ha un tag unix e tutti gli altri hanno fatto un ottimo lavoro affrontando il tag linux , è ansible get queste informazioni su OS X e altri sisthemes derivanti da BSD utilizzando

 ps -p <PID> -wwwe 

o

 ps -p <PID> -wwwE 

e su Solaris con

 /usr/ucb/ps -wwwe <PID> 

Come altri hanno già citato, su Linux, è ansible eseguire la ricerca in / proc ma esistono, a seconda della versione del kernel, uno o due limiti:

Innanzitutto, il file dell'ambiente contiene l'ambiente come sembrava quando il process è stato generato. Ciò significa che le modifiche che il process potrebbe aver fatto al suo ambiente non saranno visibili in / proc:

 $ cat /proc/$$/environ | wc -c 320 $ bash $ cat /proc/$$/environ | wc -c 1270 $ 

La prima shell è una shell di login e ha inizialmente un ambiente molto limitato, ma lo aumenta per esempio, ad esempio .bashrc ma / proc non riflette questo. La seconda shell eredita l'ambiente più grande fin dall'inizio, perché esso si presenta in / proc.

Inoltre, sui vecchi kernel, il contenuto del file di ambiente è limitato a una dimensione di pagina (4K):

 $ cat /proc/$$/environ | wc -c 4096 $ env | wc -c 10343 $ 

Da qualche parte tra 2.6.9 (RHEL4) e 2.6.18 (RHEL5) questo limite è stato rimosso …

corretto uso delle opzioni BSD per farlo (alless su Linux):

 ps e $pid 

o

 ps auxe #for all processes 

e sì, la man page è piuttosto confusa. ( via )

 cat /proc/PID/environ 

sostituire il PID con il PID del process che si desidera visualizzare. Tutte le informazioni su un process in esecuzione sono sotto la directory / proc / PID /

esempio: cat / proc / 32512 / environ

Sotto Linux, provavo a dare un'occhiata

 /proc/<pid>/environ 

Tratto da Wiki Archlinux :

È ansible creare una function temporanea per analizzare i valori in /proc/<pid>/environ . Al prompt del terminal:

 envof() { sed 's/\x0/\n/g' /proc/${1}/environ; } 

Quindi con il pid del process che vuoi, basta usare:

 envof <pid> 

Per Solaris 5.10, questo funziona:

 pargs -e <PID> 

E dal momento che il mio lavoro mi fa diventare un fan di AIX, non dimentichiamoci:

 ps eww [pid] 

O come la pagina uomo lo chiama, "Berkeley Standards".

Per qualsiasi motivo, / proc / PID / environ non esiste in AIX.

Una soluzione mac, probabilmente anche altri BSD potrebbero essere qualcosa di simile

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

Le variables di ambiente vengono aggiunte alla row di command, rimuove la row di command e abbiamo solo le variables di ambiente rimaste.

Non è perfetto perché sono separati da spazio separato da LF

Mentre documentato piuttosto scarsamente, il contenuto di /proc/<pid>/environ contiene solo l'ambiente utilizzato per avviare il process.

Se hai bisogno di verificare lo stato attuale di un ambiente di process, un modo per farlo è quello di utilizzare 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 
Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.