Jak wyświetlić listę wszystkich procesów Java w bash? Potrzebuję linii poleceń. Wiem, że jest polecenie, ps
ale nie wiem, jakich parametrów potrzebuję.
linux
bash
unix
command-line
Jacek Koralik
źródło
źródło
ps
to najpierw spróbowaćman ps
,info ps
i dowiedzieć się o nim w Internecie.Odpowiedzi:
próbować:
i zobacz, jak sobie radzisz
źródło
Najnowsza wersja Java jest dostarczana z narzędziem Java Virtual Machine Process Status Tool „jps”
http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html
Na przykład,
źródło
jest najbardziej przydatna. Wyświetla tylko pid i kwalifikowaną nazwę klasy głównej:
źródło
Możesz również użyć pojedynczego polecenia pgrep (nie wymaga używania potoków i wielu poleceń):
źródło
Począwszy od Java 7 , najprostszym sposobem i mniej podatnym na błędy jest po prostu użycie polecenia,
jcmd
które jest częścią JDK, tak aby działało w ten sam sposób we wszystkich systemach operacyjnych.Przykład:
Więcej szczegółów o tym, jak używać
jcmd
.Zobacz także Utility
jcmd
źródło
jps
Aby uzyskać lepszy format wyjściowy, sprawdź to polecenie:
źródło
Spowoduje to zwrócenie wszystkich uruchomionych procesów java w środowisku linux. Następnie możesz zabić proces, używając identyfikatora procesu.
źródło
ps aux | grep java
lub
$ ps -fea|grep -i java
źródło
Jeśli chcę po prostu wymienić procesy java, użyj:
źródło
źródło
grep
procesu?Powyższe będzie
(przy okazji, ten przykład nie jest skuteczny, ale łatwy do zapamiętania);)
możesz przesłać powyższe do innych poleceń, na przykład:
itp...
źródło
Kiedy chcę wiedzieć, czy wykonywana jest określona klasa Java, używam następującego wiersza poleceń:
W widoku strony systemu operacyjnego nazwa polecenia procesu to „java”. Opcja „ww” poszerza maksymalną liczbę znaków w kolumnie, więc możliwe jest grepowanie FQN powiązanej klasy.
źródło
$ top
po prostu podaję "java" jako polecenie, które nie jest zbyt pomocne, gdy próbuję dowiedzieć się, który proces zajmuje procesor.$ ps ww -fC java
zawiera brakujące elementy układanki.jps i jcmd nie pokazywały mi żadnych wyników, gdy próbowałem go używać przy użyciu openjdk-1.8 na redhat linux. Ale nawet jeśli tak, to pokazuje tylko procesy w ramach bieżącego użytkownika, co w moim przypadku nie działa. Użycie ps | grep jest tym, co ostatecznie zrobiłem, ale ścieżka klas dla niektórych aplikacji Java może być bardzo długa, co sprawia, że wyniki są nieczytelne, więc użyłem seda, aby ją usunąć. Jest to jeszcze trochę szorstkie, ale usuwa wszystko oprócz: PID, użytkownika, java-class / jar, args.
Wyniki wyglądają mniej więcej tak:
Alternatywą w systemie Windows do wyświetlania wszystkich procesów jest:
Ale to będzie wymagało trochę analizy, aby uczynić ją bardziej czytelną.
źródło
Jest na to wiele sposobów. Można użyć
java.lang.ProcessBuilder
i „pgrep”, aby uzyskać identyfikator procesu (PID) z czymś takim:pgrep -fl java | awk {'print $1'}
. Lub, jeśli pracujesz w systemie Linux, możesz zapytać o/proc
katalog.Wiem, to wydaje się okropne i nieprzenośne, a nawet źle wdrożone, zgadzam się. Ale ponieważ Java faktycznie działa na maszynie wirtualnej, z jakiegoś absurdalnego powodu, którego nie mogę zrozumieć po ponad 15 latach pracy z JDK, dlatego nie można zobaczyć rzeczy poza przestrzenią JVM, to naprawdę śmieszne z tobą Pomyśl o tym. Można robić wszystko inne, nawet
fork
ijoin
procesy potomne (te były straszne sposób wielozadaniowość, kiedy świat nie wiedział o wątków lub pthreads , co to do cholery! Co się dzieje w sprawie Java ?! :).To da ogromną dyskusję, którą znam, ale w każdym razie istnieje bardzo dobre API, którego już używałem w moich projektach i jest wystarczająco stabilne ( to OSS, więc nadal musisz przetestować każdą wersję, której używasz, zanim naprawdę zaufasz API ): https : //github.com/jezhumble/javasysmon
JavaDoc: http://jezhumble.github.io/javasysmon/ , wyszukaj klasę
com.jezhumble.javasysmon.OsProcess
, ona załatwi sprawę . Mam nadzieję, że to pomogło, powodzenia.źródło
Jest lepiej, ponieważ pokaże tylko aktywne procesy, nie uwzględniając tego polecenia, które również otrzymało ciąg java,
[]
który załatwia sprawęźródło
Używam tego (dobrze na Debianie 8):
alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'
źródło
Aby poznać listę programów Java działających na komputerze z systemem Linux. ps -e | grep java
źródło