Muszę rozwiązać niektóre problemy związane ze zmiennymi środowiskowymi w systemie Unix.
W systemie Windows mogę użyć narzędzia, takiego jak ProcessExplorer, aby wybrać konkretny proces i wyświetlić wartości każdej zmiennej środowiskowej.
Jak mogę osiągnąć to samo na Uniksie? echoing
i env
cmd tylko pokazują wartości w chwili obecnej, ale chcę zobaczyć, jakich wartości używa aktualnie uruchomiony proces.
Odpowiedzi:
Jeśli chcesz mieć pid (y) danego działającego pliku wykonywalnego, możesz, wśród wielu innych możliwości, użyć
pidof
:EDYCJA :
Całkowicie cytuję komentarze Dennisa Williamsona i Teddy'ego, aby uzyskać bardziej czytelny wynik. Moje rozwiązanie jest następujące:
źródło
cat /proc/17330/environ | tr \\0 \\n
xargs --null --max-args=1 echo < /proc/PID/environ
/proc
system plików nie jest przenośny.xargs
do konwertowania wartości zerowych na znaki nowej linii jest lepsze niż używanietr
. Czy ktoś może to dla mnie rozłożyć? Dzięki.Ponieważ to pytanie ma znacznik unix, a wszyscy inni wykonali tak świetną robotę adresując znacznik linux , możesz uzyskać te informacje na OS X i innych systemach pochodzących z BSD za pomocą
lub
i na Solarisie z
Solaris obsługuje również
/proc
katalog, jeśli nie chcesz pamiętaćps
nieznanego polecenia.źródło
ps -p <PID> -wwE
./proc/PID/environ
. Pliki te są czytelne tylko dla właściciela procesu.Jak wspomnieli inni, w Linuksie możesz zajrzeć do / proc, ale istnieją, w zależności od wersji jądra, jedno lub dwa ograniczenia:
Po pierwsze, plik środowiska zawiera środowisko, w którym wyglądało, gdy proces się pojawił. Oznacza to, że wszelkie zmiany, które proces mógł wprowadzić w swoim otoczeniu, nie będą widoczne w / proc:
Pierwsza powłoka jest powłoką logowania i początkowo ma bardzo ograniczone środowisko, ale rozwija się poprzez pozyskiwanie np. .Bashrc, ale / proc tego nie odzwierciedla. Druga powłoka od samego początku dziedziczy większe środowisko, dlatego pokazuje się w / proc.
Ponadto w starszych jądrach zawartość pliku środowiska jest ograniczona do rozmiaru strony (4K):
Gdzieś pomiędzy 2.6.9 (RHEL4) a 2.6.18 (RHEL5) ten limit został usunięty ...
źródło
poprawne użycie opcji BSD, aby to zrobić (przynajmniej na Linuksie):
lub
i tak, ps manpage jest dość mylący. ( przez )
źródło
ps eww $pid
rozwiązuje 2. problem.xargs
lubtr
konwersji na nowe wiersze w celu zwiększenia czytelności. Prawdopodobnie zdałeś sobie z tego sprawę w ciągu następnych czterech lat.zamień PID na PID procesu, który chcesz zobaczyć. Każda informacja o uruchomionym procesie znajduje się w katalogu / proc / PID /
przykład: cat / proc / 32512 / Environment
źródło
Zaczerpnięte z Archlinux wiki :
Możesz utworzyć funkcję tymczasową do analizowania wartości
/proc/<pid>/environ
. W wierszu polecenia terminalu:Następnie z pid pożądanego procesu, po prostu użyj:
źródło
Pod Linuksem spróbuję rzucić okiem
źródło
W przypadku Solaris 5.10 działa to:
źródło
Choć raczej słabo udokumentowana, zawartość
/proc/<pid>/environ
będzie zawierała tylko środowisko użyte do uruchomienia procesu.Jeśli chcesz sprawdzić bieżący stan środowiska procesu, jednym ze sposobów jest skorzystanie z niego
gdb
.źródło
A ponieważ moja praca sprawia, że jestem fanem AIX, nie zapomnijmy:
Lub, jak to nazywa strona podręcznika, „Berkeley Standards”.
Z jakiegokolwiek powodu / proc / PID / Environment nie istnieje w systemie AIX.
źródło
Jeśli chcesz utworzyć sformatowane
env
dane wyjściowe zmiennych środowiskowych dla dowolnego procesu (PID), możesz utworzyć wygodnepenv <pid>
polecenie bash (dostosowane do twojego systemu operacyjnego) i dodać je do.bashrc
:Linux dodaj to do swojego ~ / .bashrc:
macOS / BSD dodaj to do swojego ~ / .bashrc:
Solaris dodaj to do ~ / .bashrc:
Stosowanie:
źródło
Rozwiązanie Mac, prawdopodobnie również inne BSD mogą być czymś podobnym
Zmienne środowiskowe są dołączane do wiersza poleceń, usuwa to wiersz poleceń i pozostały nam tylko zmienne środowiskowe.
Nie jest idealny, ponieważ są one rozdzielone spacjami, a nie LF
źródło
/ proc / PID / Environment
w tym celu najpierw musimy zidentyfikować PID procesu. w tym celu możesz użyć polecenia ps
źródło