Lösung 1:
cat /proc/<pid>/environ
Wenn Sie PID(s) einer bestimmten laufenden ausführbaren Datei haben möchten, können Sie neben einer Reihe anderer Möglichkeiten pidof
verwenden :
AlberT$ pidof sshd
30690 6512
BEARBEITEN :
Ich zitiere vollständig die Kommentare von Dennis Williamson und Teddy, um eine besser lesbare Ausgabe zu erreichen. Meine Lösung ist die folgende:
tr '\0' '\n' < /proc/<pid>/environ
Lösung 2:
Da diese Frage ein unix hat tag und alle anderen haben so großartige Arbeit geleistet, was Linux angeht -Tag können Sie diese Informationen unter OS X und anderen von BSD abgeleiteten Systemen mit
abrufenps -p <PID> -wwwe
oder
ps -p <PID> -wwwE
und auf Solaris mit
/usr/ucb/ps -wwwe <PID>
Solaris unterstützt auch die /proc
Verzeichnis, wenn Sie sich nicht an den obskuren ps
erinnern wollen Befehl.
Lösung 3:
Wie andere bereits erwähnt haben, können Sie unter Linux in /proc suchen, aber es gibt, abhängig von Ihrer Kernel-Version, ein oder zwei Einschränkungen:
Zunächst einmal enthält die Environ-Datei die Umgebung, wie sie aussah, als der Prozess gestartet wurde. Das bedeutet, dass alle Änderungen, die der Prozess möglicherweise an seiner Umgebung vorgenommen hat, nicht in /proc:
sichtbar sind$ cat /proc/$$/environ | wc -c
320
$ bash
$ cat /proc/$$/environ | wc -c
1270
$
Die erste Shell ist eine Login-Shell und hat anfangs eine sehr begrenzte Umgebung, wächst aber, indem sie z. .bashrc, aber /proc spiegelt dies nicht wider. Die zweite Shell erbt von Anfang an die größere Umgebung, weshalb sie in /proc.
angezeigt wirdAußerdem ist der Inhalt der Environ-Datei auf älteren Kerneln auf eine Seitengröße (4K) beschränkt:
$ cat /proc/$$/environ | wc -c
4096
$ env | wc -c
10343
$
Irgendwann zwischen 2.6.9 (RHEL4) und 2.6.18 (RHEL5) wurde dieses Limit entfernt...
Lösung 4:
korrekte Verwendung der BSD-Optionen, um dies zu tun (zumindest unter Linux):
ps e $pid
oder
ps auxe #for all processes
und ja, die PS-Manpage ist ziemlich verwirrend.(via)
Lösung 5:
Obwohl eher spärlich dokumentiert, ist der Inhalt von /proc/<pid>/environ
enthält nur die Umgebung, die zum Starten des Prozesses verwendet wurde.
Wenn Sie den aktuellen Status einer Prozessumgebung überprüfen müssen, können Sie dies unter anderem mit gdb
tun .
# 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