GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Umgebungsvariablen eines laufenden Prozesses unter Unix?

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

abrufen
ps -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 wird

Auß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

Linux
  1. Umgebung eines laufenden Prozesses ändern?

  2. Welcher Prozess hat Pid 0?

  3. Gibt es eine Möglichkeit, die Umgebungsvariablen eines anderen Prozesses in Unix zu ändern?

  4. Ausführen von sqlplus im Hintergrund in Unix

  5. Legen Sie eine temporäre Umgebung fest ($PATH)

Laufende Prozesse

Linux-Umgebungsvariablen

Wie man Umgebungsvariablen eines Prozesses liest

Bestimmen des bestimmten Prozessors, auf dem ein Prozess läuft

Sind Umgebungsvariablen für nicht privilegierte Benutzer unter Linux sichtbar?

Sind PID-Dateien zuverlässig, um festzustellen, ob ein Prozess ausgeführt wird?