Soluzione 1:
cat /proc/<pid>/environ
Se vuoi avere pid(s) di un dato eseguibile in esecuzione puoi, tra una serie di altre possibilità, usare pidof
:
AlberT$ pidof sshd
30690 6512
MODIFICA :
Cito totalmente i commenti di Dennis Williamson e Teddy per ottenere un output più leggibile. La mia soluzione è la seguente:
tr '\0' '\n' < /proc/<pid>/environ
Soluzione 2:
Poiché questa domanda ha un unix tag e tutti gli altri hanno fatto un ottimo lavoro con linux tag, puoi ottenere queste informazioni su OS X e altri sistemi derivati da BSD usando
ps -p <PID> -wwwe
o
ps -p <PID> -wwwE
e su Solaris con
/usr/ucb/ps -wwwe <PID>
Solaris supporta anche /proc
directory se non vuoi ricordare l'oscuro ps
comando.
Soluzione 3:
Come altri hanno già detto, su Linux puoi cercare in /proc ma ci sono, a seconda della versione del tuo kernel, uno o due limiti:
Prima di tutto, il file environ contiene l'ambiente come appariva quando è stato generato il processo. Ciò significa che qualsiasi modifica che il processo potrebbe aver apportato al suo ambiente non sarà visibile in /proc:
$ cat /proc/$$/environ | wc -c
320
$ bash
$ cat /proc/$$/environ | wc -c
1270
$
La prima shell è una shell di login e inizialmente ha un ambiente molto limitato ma lo fa crescere procurandosi ad es. .bashrc ma /proc non lo riflette. La seconda shell eredita l'ambiente più grande dall'inizio, motivo per cui viene mostrato in /proc.
Inoltre, sui kernel più vecchi, il contenuto del file environ è 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...
Soluzione 4:
uso corretto delle opzioni BSD per farlo (almeno su Linux):
ps e $pid
o
ps auxe #for all processes
e sì, la manpage di ps è piuttosto confusa.(via)
Soluzione 5:
Anche se piuttosto scarsamente documentato, il contenuto di /proc/<pid>/environ
conterrà solo l'ambiente utilizzato per avviare il processo.
Se hai bisogno di ispezionare lo stato corrente dell'ambiente di un processo, un modo per farlo è usare 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