Jeśli wywołasz najwyższe polecenie, otrzymasz wszystkie uruchomione procesy. Ale jak mogę ograniczyć dane wyjściowe tylko do określonej nazwy procesu, takiej jak „java” ?
Wypróbowałem ten top -l 2 | grep java, ale w ten sposób otrzymujesz tylko migawki, a nie stale aktualizowaną listę. I górne -l 0 | grep java nie jest do końca jasne.
Odpowiedzi:
Wolę następujące, więc nadal mogę korzystać z top interaktywnie, bez konieczności sprawdzania pidów za każdym razem, gdy go uruchamiam:
Oczywiście, jeśli procesy się zmienią, będziesz musiał ponownie uruchomić polecenie.
Wyjaśnienie:
pgrep process-name
zwraca listę identyfikatorów procesów, które są oddzielone znakami nowej liniitr "\\n" ","
tłumaczy te znaki nowej linii na przecinki, ponieważ top potrzebuje rozdzielonej przecinkami listy identyfikatorów procesówsed
to edytor strumieniowy,sed 's/,$//'
używany tutaj do usuwania końcowego przecinkaźródło
top: pid limit (20) exceeded
. Czy w ogóle istnieje ten limit?top -p $(pgrep process-name | head -20 | tr "\\n" "," | sed 's/,$//')
. Spowoduje to wyświetlenie danych dla maksymalnie pierwszych 20 identyfikatorów PID zwróconych przezpgrep
.-pid
zamiast-p
.Znajdź pidy procesów, które chcesz monitorować, a następnie skorzystaj z
-p
opcji, która umożliwia podanie listy pidów dotop
polecenia.Przykład:
(Myślę, że możesz również przekazać listę oddzieloną przecinkami).
źródło
co powiesz na top -b | grep java
źródło
Rozwijając odpowiedź @ dogbane , możesz pobrać wszystkie PIDy dla nazwanego procesu,
pgrep
aby wykonać następujące czynności:źródło
top -p "$(pgrep -d ',' php)" top: pid limit (20) exceeded
man top
mówi: „Tę opcję można podać maksymalnie 20 razy lub możesz podać listę rozdzielaną przecinkami z maksymalnie 20 pidami”. Cholera.Użyj polecenia watch
źródło
man watch
" watch uruchamia polecenie wielokrotnie, wyświetlając jego wyjście i błędy "; nie pokazuje aktualnie uruchomione procesy jaktop
robiwatch -d 'top -b -n1 | grep mysql'
Korzystając z odpowiedzi tutaj , udało mi się stworzyć jedną wkładkę
To działa dla mnie na MacOS 10.12 (Sierra)
źródło
Rozwiązałem swój problem używając:
w tym przypadku: -n służy do ustawiania, ile razy top will, jaki proces
i -b jest używany do wyświetlenia wszystkich pidów
zapobiega błędom takim jak: top: przekroczono limit pid (20)
źródło
Poniższy kod aktualizuje listę procesów co 5 sekund za pomocą polecenia watch:
watch -n 5 -t top -b -n 1 -p$(pgrep java | head -20 | tr "\\n" "," | sed 's/,$//')
źródło
Prowadzę to (np.):
top -b | egrep -w 'java|mysqld'
źródło
Załóżmy, że jeśli mamy więcej niż 20 procesów uruchomionych na serwerze o tej samej nazwie ... to nie pomoże
top -p
pgrep oracle | head -n 20 | tr "\\n" "," | sed 's/,$//'
Spróbuje wymienić i dostarczyć w czasie rzeczywistym 20 procesów, w których mamy dużą szansę na pominięcie innych procesów, które pochłaniają więcej zasobów ....
Wciąż szukam lepszej opcji w tej sprawie
źródło
Bardziej konkretny przypadek, którego szukałem:
W przypadku procesów Java możesz również użyć,
jps -q
gdzie jps jest narzędziem z $ JAVA_HOME / bin i dlatego powinno znajdować się w $ PATH.źródło
Przyszedłem tutaj, szukając odpowiedzi na to w OSX. Skończyło się na tym, że otrzymałem to, co chciałem, dzięki bash i awk:
Pętlę w górę w trybie logowania i filtruję za pomocą awk, budując tablicę asocjacyjną z danych wyjściowych pgrep. Awk wypisuje pierwsze 12 wierszy, gdzie 12. wiersz to nagłówki kolumn, a następnie każdy wiersz zawierający pid będący kluczem w tablicy. Plik zrzutu jest używany do bardziej widocznej pętli.
źródło
po prostu
top -bn 1 | grep java
załatwi sprawę za Ciebieźródło
Uruchomienie poniższego zapewni ciągłą aktualizację w konsoli:
źródło
Oto jedyne jak dotąd rozwiązanie dla MacOS:
chociaż będzie to niepożądane,
invalid option or syntax: -pid
jeśli nie majava
aktywnych procesów.WYJAŚNIENIE
Inne zamieszczone tutaj rozwiązania używają formatu
top -p id1,id2,id3
, ale MacOStop
obsługuje tylko nieporęczny formattop -pid id1 -pid id2 -pid id3
.Najpierw otrzymujemy listę identyfikatorów procesów, które mają nazwę procesu „java”:
i
awk
przekazujemy to, co łączy wyniki z separatorem" -pid "
Niestety, to pozostawia końcowy separator! Na przykład, do tej pory mogliśmy uzyskać ciąg
"123 -pid 456 -pid 789 -pid "
.Następnie po prostu
sed
usuwamy ostatnie 6 znaków separatora.Jesteśmy gotowi przekazać wyniki do
top
:źródło
pobierz pid procesu:
powiedz topowi, jakie pid (y) procesów ma wyświetlić
przykład:
Top wyświetli tylko 2 procesy „konsoli”. Jest to przydatne na zajętym serwerze przez ssh, bez konieczności przechodzenia przez grep.
źródło
Stosując podejście wspomniane w odpowiedzi Ricka Byersa:
ale miałem uruchomionych ponad 20 procesów, więc poniższe polecenie może być pomocne dla kogoś, kto napotka podobną sytuację.
pgrep
pobiera listę procesów o podanej nazwie - w tym przypadku java.head
jest używany do pobrania pierwszych 20 pidów, ponieważ top nie może obsłużyć więcej niż 20 pidów przy użyciu argumentu -p. Wreszciepaste
dołącza do listy pidów ze znakiem „,”.Możesz kontrolować nazwę procesu, którego szukasz w powyższym poleceniu i liczbę procesów o tej nazwie, które chcesz obserwować. Możesz zignorować
head -n 20
część, jeśli liczba procesów o podanej nazwie jest mniejsza niż 20.źródło