Jak wyświetlić konkretny proces u góry


47

Czy istnieją jakieś stosunkowo ścisłe opcje z topem do śledzenia określonego procesu?
Idealnie, identyfikując proces według wartości czytelnej dla człowieka? np . chromelub java.

Innymi słowy, chcę wyświetlić wszystkie typowe informacje, które zapewnia góra, ale aby wyniki zostały przefiltrowane do podanych parametrów, tj. „chrome” lub „java”


1
próbowałeś top | grep chrome?
Pandya

1
możesz również użyć, ps -x | chromeaby uzyskać pid (niech pokazany zostanie pid 2034), a następnietop | grep 2034
Pandya

top | grep chromedziałało idealnie - dzięki!
Michael Coleman

@ Pandya - również proces, którego szukałem, działał tylko przez kilka sekund (node.js podczas testu integracji) - co oznaczało, że kiedy ps -x | process_nameuzyskiwałem PID, kiedy ponownie uruchomiłem proces, PID był inny, a zatem oryginalny PID nie mógł tego zidentyfikować.
Michael Coleman

Odpowiedzi:


24

Możesz po prostu użyć grep:

NAME
       grep, egrep, fgrep, rgrep - print lines matching a pattern

SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION
       grep  searches  the  named  input  FILEs (or standard input if no files are named, or if a single
       hyphen-minus (-) is given as file name) for lines containing a match to the  given  PATTERN.   By
       default, grep prints the matching lines.

Uruchom następujące polecenie, aby uzyskać żądane dane wyjściowe (ex-chrome):

top | grep chrome

Tutaj używamy grepz rurociągami, |więc topi grepdziałaj równolegle; topdane wyjściowe podane grepjako (jako dane wejściowe) i grep chromefiltrują pasujące linie chromedo topzatrzymania.


1
dzięki, wiem, że inni mają swoje preferencje, ale podoba mi się ta odpowiedź, ponieważ jest łatwa do zrozumienia, a zatem łatwiejsza do zapamiętania również w przyszłości! - Chciałbym głosować, ale nie mam wystarczającej reputacji ...
Michael Coleman,

3
Działa to tylko wtedy, gdy proces znajduje się w wyświetlanym wyniku na górze. Myślę @ odpowiedź Ramesh powinna być przyjęta jedna
jb

@JamieBullock pytanie dotyczy toptylko i OP chce filtrować proces na podstawie top.
Pandya,

@ Właściwie, wycofuję mój poprzedni komentarz, ponieważ był oparty na pomyłce w moim kodzie. Nadal uważam, że odpowiedź @ Ramesha jest lepsza (a także filtruje proces na podstawie). Mogę łatwo złamać twoją, np. Za pomocąsleep 10 & top | grep sleep
jb

Bardziej podoba mi się unix.stackexchange.com/a/165343/48973, ponieważ pokazuje nagłówki.
Ryan

39

Z mojej innej odpowiedzi tutaj możesz zrobić coś takiego,

top -p `pgrep "java"`

4
top -p `pgrep "java"`daje mi następujący błąd w powłoce bash top: -p requires argument. top -ppgrep -d ',' "apache2" działał dla mnie, ale tak naprawdę nie rozumiałem, co robi polecenie - czy to sposób na podawanie wielu argumentów na górę?
Michael Coleman,

@ Ramesh musisz podać pidlistę przecinków oddzielonych do pracy.
Kannan Mohan

3
To właściwa odpowiedź.
j03m

1
+1 To jest poprawna odpowiedź. „top | grep Chrome” jest raczej barbarzyński, ponieważ odrzuca WSZYSTKIE PRODUKTY od góry niepasującego do „Chrome”, tracąc takie elementy, jak nagłówek i kolumny kolumn. Używanie podpowłoki z danymi wyjściowymi pgrep jest poprawnym zastosowaniem filozofii uniksowej.
John M Naglick,

2
@loretoparisi, może to być spowodowane tym, że używany selektor pasuje do wielu procesów. Zobacz tę odpowiedź dla polecenia, które działa z jednym lub więcej pasującymi procesami.
Michael Hays

21
top -p `pgrep -d "," java`

Wyjaśnienie:

  1. top -p pid1,pid2: pokaż wiele informacji o procesie, pid powinien być oddzielony ,
  2. pgrep -d "," java: wydrukuj pids wszystkich programów Java, pids są domyślnie oddzielone znakiem nowej linii. użyj, -d ","aby oddzielić go według ,wymagań góry.

Jeśli widzisz błąd podobny top: -p argument missing, oznacza to, że nie działa żaden program Java, tzn. Pgrep nie ma danych wyjściowych.


1
To rozwiązanie działa lepiej niż używanie tylko top -p pgrep „java”. Dziękuję Ci.
loretoparisi

1
Zapobiegnij błędowi, sprawdzając pgrepkod wyjścia:pids="$(pgrep -d, java)" && top -p "$pids"
syme

12

W OpenBSD topwystarczy nacisnąć gi wprowadzić nazwę polecenia, które chcesz filtrować.

W topnp. Ubuntu naciśnij oi wprowadź np., COMMAND=chromeAby wyświetlić tylko wpisy z COMMANDkolumny, które są równe chrome.

W systemach Linux, które używają tej samej topimplementacji co Ubuntu, przeczytaj FILTROWANIE w sekcji Okno w topinstrukcji.


7

Podano inne dobre odpowiedzi, ale jakiś czas temu napisałem skrypt, który nazwałam ptop, który dobrze mi służy:

#!/bin/sh
top -p $(pidof "$@" |sed s#\ #,#g) 2>/dev/null
if [ $? -ne 0 ]; then
  echo No processes with the specified name\(s\) were found
fi

Obsługuje wiele nazw procesów, które należy określić (jak ptop bash chrome) i zapewnia ładniejszy komunikat o błędzie w przypadku, gdy nie ma / nie ma procesów z żadną z podanych nazw.


3

Jeśli chcesz pozostać topi zachować wszystkie inne procesy w kontekście kontekstu, możesz nacisnąć, Laby wyszukać proces:

Locate string chrome

Podświetli to każdy proces z chromenazwą i wyświetli go. Użyj, &aby przejść do następnego meczu.

Możesz nacisnąć, caby przełączyć między wyświetlaniem nazwy procesu a pełnym poleceniem.


To ^, ponieważ ludzie RTFM! man top | less +/5d
cprn

0

Możesz również użyć filtra u góry, aby wyodrębnić określone procesy. Naciśnij „O”, aby wyświetlić monit o filtr. Następnie wpisz filtr sformatowany jako FIELD = wartość. Na przykład, aby odfiltrować wszystkie procesy tmux, użyj:

COMMAND=tmux

Użyj „=”, aby zresetować filtry. Zobacz sekcję „FILTROWANIE” na górnej stronie man.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.