Ich muss einige Probleme im Zusammenhang mit Umgebungsvariablen auf einem Unix-System beheben.
Unter Windows kann ich mit einem Tool wie ProcessExplorer einen bestimmten Prozess auswählen und Werte für jede Umgebungsvariable anzeigen.
Wie kann ich dasselbe unter Unix erreichen? echoing
und env
cmd zeigen derzeit nur Werte an, aber ich möchte anzeigen, welche Werte der laufende Prozess derzeit verwendet.
Antworten:
Wenn Sie möchten, dass die PIDs einer bestimmten ausführbaren Datei angezeigt werden, können Sie unter anderem Folgendes verwenden
pidof
:EDIT :
Ich zitiere die Kommentare von Dennis Williamson und Teddy , um eine besser lesbare Ausgabe zu erzielen. Meine Lösung ist die folgende:
quelle
cat /proc/17330/environ | tr \\0 \\n
xargs --null --max-args=1 echo < /proc/PID/environ
/proc
Dateisystem ist nicht portierbar.xargs
von Nullen in Zeilenumbrüche besser ist als die Verwendung vontr
. Kann es mir jemand auslegen? Vielen Dank.Da diese Frage ein Unix- Tag hat und alle anderen Linux- Tags so gut angesprochen haben , können Sie diese Informationen unter OS X und anderen BSD-abgeleiteten Systemen abrufen
oder
und auf Solaris mit
Solaris unterstützt das
/proc
Verzeichnis auch, wenn Sie sich nicht an denps
unbekannten Befehl erinnern möchten.quelle
ps -p <PID> -wwE
./proc/PID/environ
. Diese Dateien können nur vom Eigentümer des Prozesses gelesen werden.Wie andere bereits erwähnt haben, können Sie unter Linux in / proc nachsehen, aber es gibt je nach Kernel-Version ein oder zwei Einschränkungen:
Zuallererst enthält die Umgebungsdatei die Umgebung, wie sie aussah, als der Prozess erzeugt wurde. Das bedeutet, dass Änderungen, die der Prozess möglicherweise an seiner Umgebung vorgenommen hat, in / proc nicht sichtbar sind:
Die erste Shell ist eine Login-Shell und hat anfangs eine sehr eingeschränkte Umgebung, erweitert diese jedoch durch das Sourcing von zB .bashrc, aber / proc reflektiert dies nicht. Die zweite Shell erbt von Anfang an die größere Umgebung, weshalb sie in / proc anzeigt.
Bei älteren Kerneln ist der Inhalt der Umgebungsdatei auf eine Seitengröße (4 KB) beschränkt:
Irgendwo zwischen 2.6.9 (RHEL4) und 2.6.18 (RHEL5) wurde dieses Limit entfernt ...
quelle
korrekte Verwendung der BSD-Optionen, um dies zu tun (zumindest unter Linux):
oder
und ja, ps manpage ist ziemlich verwirrend. ( via )
quelle
ps eww $pid
das 2. Problem behoben.xargs
odertr
in Zeilenumbrüche umwandeln können. Sie haben das wahrscheinlich in den letzten vier Jahren bemerkt.Ersetzen Sie die PID durch die PID des Prozesses, den Sie anzeigen möchten. Alle Informationen zu einem laufenden Prozess finden Sie im Verzeichnis / proc / PID /
Beispiel: cat / proc / 32512 / environ
quelle
Entnommen aus dem Archlinux-Wiki :
Sie können eine temporäre Funktion erstellen, um die Werte in zu analysieren
/proc/<pid>/environ
. An der Eingabeaufforderung des Terminals:Dann mit der PID des Prozesses, den Sie wollen, verwenden Sie einfach:
quelle
Unter Linux würde ich versuchen, einen Blick darauf zu werfen
quelle
Unter Solaris 5.10 funktioniert Folgendes:
quelle
Der Inhalt von ist zwar eher spärlich dokumentiert,
/proc/<pid>/environ
enthält jedoch nur die Umgebung, mit der der Prozess gestartet wurde.Wenn Sie den aktuellen Status einer Prozessumgebung überprüfen müssen, können Sie dies unter Verwendung von tun
gdb
.quelle
Und da ich aufgrund meines Jobs ein AIX-Fan bin, sollten wir Folgendes nicht vergessen:
Oder wie die Manpage es nennt: "Berkeley Standards".
Aus irgendeinem Grund ist / proc / PID / environ in AIX nicht vorhanden.
quelle
Wenn Sie eine formatierte
env
Ausgabe der Umgebungsvariablen für einen beliebigen Prozess (PID) erstellen möchten , können Sie einen bequemen bash-penv <pid>
Befehl erstellen (der auf Ihr Betriebssystem zugeschnitten ist) und ihn hinzufügen.bashrc
:Linux füge dies zu deinem ~ / .bashrc hinzu:
macOS / BSD füge dies zu deiner ~ / .bashrc hinzu:
Solaris fügt dies zu Ihrer ~ / .bashrc hinzu:
Verwendungszweck:
quelle
Eine Mac-Lösung, wahrscheinlich auch andere BSDs, könnte so ähnlich sein
Die Umgebungsvariablen werden an die Befehlszeile angehängt. Dadurch wird die Befehlszeile entfernt, und es bleiben nur die Umgebungsvariablen übrig.
Es ist nicht perfekt, weil sie durch Leerzeichen und nicht durch NF getrennt sind
quelle
/ proc / PID / environ
Dazu müssen wir zuerst die PID des Prozesses identifizieren. Dafür können Sie den Befehl ps verwenden
quelle