top -pid 3907 -stats "pid,command,cpu"
-pid 3907
: Twój identyfikator procesu
-stats pid,command,cpu
: pokaż tylko identyfikator procesu, nazwę i% procesora
Nie ma potrzeby uruchamiania awk
na wyjściu.
Jeśli chcesz przetworzyć dane wyjściowe, użyj, -l 0
aby uruchomić w trybie rejestrowania (0 oznacza w nieskończoność, wszystko inne ogranicza liczbę próbek). Wyjście będzie wyglądać tak (dwa powtórzenia):
Processes: 72 total, 3 running, 1 stuck, 68 sleeping, 326 threads
2011/05/10 19:15:13
Load Avg: 0.14, 0.14, 0.09
CPU usage: 20.0% user, 26.66% sys, 53.33% idle
SharedLibs: 5304K resident, 5208K data, 0B linkedit.
MemRegions: 16345 total, 1048M resident, 54M private, 338M shared.
PhysMem: 726M wired, 1802M active, 687M inactive, 3215M used, 750M free.
VM: 169G vsize, 1036M framework vsize, 5261732(0) pageins, 552476(0) pageouts.
Networks: packets: 46747406/52G in, 32528901/3715M out.
Disks: 9452898/244G read, 11226269/293G written.
PID COMMAND %CPU
3907 WindowServer 0.0
Processes: 72 total, 3 running, 1 stuck, 68 sleeping, 326 threads
2011/05/10 19:15:14
Load Avg: 0.13, 0.14, 0.09
CPU usage: 0.95% user, 1.90% sys, 97.14% idle
SharedLibs: 5304K resident, 5208K data, 0B linkedit.
MemRegions: 16346 total, 906M resident, 54M private, 386M shared.
PhysMem: 726M wired, 1802M active, 687M inactive, 3215M used, 751M free.
VM: 169G vsize, 1036M framework vsize, 5261732(0) pageins, 552476(0) pageouts.
Networks: packets: 46747406/52G in, 32528901/3715M out.
Disks: 9452898/244G read, 11226269/293G written.
PID COMMAND %CPU
3907 WindowServer 2.7
Użyj awk
lub podobnego narzędzia, aby wyświetlić tylko co 13 linię (ponieważ te linie zawierają wartości w tym przykładzie):
$ top -l 0 -pid 3907 -stats pid,command,cpu | awk 'NR%13==0'
3907 WindowServer 0.0
3907 WindowServer 1.3
3907 WindowServer 2.2
# top -p1 -stats "pid,command,cpu" top: unknown option 't'
top
od Linuksa.Z pewnością można to zrobić i wyjaśnię, jak bym to zrobił. Nie udaję, że to optymalne podejście, ale działa. Używam Linuksa (i powłoki bash), więc domyślne zachowanie mojego topa może się nieco różnić. Dlatego może być konieczne dostosowanie tego mini-howto do konkretnego scenariusza.
Po prostu uruchom top , bez żadnych argumentów:
$ top
Oto nagłówek i odpowiedni wiersz z mojego wyjścia:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2569 user 20 0 339m 86m 10m S 7.8 6.9 6:42.99 java
Wybrałem proces, który pozostaje w pamięci przez pewien czas i faktycznie zużywa procesor, będę go używać jako procesu testowego do osiągnięcia ostatecznego celu.
Domyślnie top działa w trybie interaktywnym. To mi nie odpowiada, chcę uchwycić odpowiednie dane i wydrukować je. Po tym zajmę się zadaniem interaktywnego wyświetlania danych. Odpowiednie cytaty z górnej strony:
To jest dostosowane górne polecenie, które drukuje dane wyjściowe tylko raz, a następnie kończy działanie:
$ top -b -n 1
Znam PID, który chcę oglądać, więc dodam jeszcze jedno ograniczenie do góry, więc drukuje dane tylko o tym procesie:
$ top -b -n 1 -p 2569
Nawet w trybie wsadowym top nadal drukuje nagłówek, zawierający różne statystyki systemowe, takie jak czas pracy, wolna pamięć / zamiana itp. Nie potrzebuję tego. Potrzebuję tylko jednego wiersza - tego, który zawiera dane o moim procesie, więc wytnę go z całego wyjścia w następujący sposób:
$ top -b -n 1 -p 2569 | tail -n 2 | head -n 1
Jak widać, mam drugą linię od 1.
Poprowadzę tę linię do awk, aby wyodrębnić tylko kolumny, których potrzebuję:
$ top -b -n 1 -p 2569 | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'
Do tej pory robiłem te manipulacje w wierszu poleceń, teraz nadszedł czas, aby dodać trochę wytrwałości i elastyczności do naszego zakodowanego konkretnego przypadku. Przenoszę całą linię do prostego skryptu powłoki. Nazwie to 3top , nazwa jest podkreślona, ponieważ będzie używana później:
#!/bin/bash
top -b -n 1 -p 2569 | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'
Numer PID jest zakodowany na stałe, oto jak ustawić skrypt, aby akceptował go jako argument wiersza poleceń:
#!/bin/bash
top -b -n 1 -p "$1" | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'
Aby wyświetlić statystyki 3top dotyczące PID 2569, należy go nazwać w następujący sposób:
$ ./3top 2569
Chcę również wyświetlać procent po obciążeniu procesora, więc dostrajam mój skrypt 3top w następujący sposób:
#!/bin/bash
out=$(top -b -n 1 -p "$1" | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}')
echo "$out%"
Przekierowałem cały wynik łańcucha poleceń (połączonych potokami) na zmienną. Następnie po prostu drukuję go za pomocą echa i dodam „%” na końcu, ponieważ obciążenie procesora jest ostatnim polem
W tym momencie mam skrypt wsadowy, który akceptuje PID jako argument i wyświetla statystyki raz. Chcesz zamiast tego monitorować w czasie rzeczywistym? To proste, ponieważ zegarek może to zrobić! Uruchom skrypt w następujący sposób:
$ watch -n 1 3top 2569
Będzie monitorował w czasie rzeczywistym, uruchamiając 3top raz na sekundę.
źródło
top
. niepoprawna opcja lub składnia: -b . Nie mam pojęcia, dlaczego było to wielokrotnie oceniane.top
(wprocps
), nie może być zainstalowany przy użyciu Homebrew, DarwinPorts lub Fink i nie może zostać skompilowany z kodu źródłowego pomocą jednejmake
lubcc top.c
.top
Format wyświetlania jest konfigurowalny, ale nie jest to sposób, aby określić opcje wyświetlania w wierszu poleceń. Jeśli jesteś pomysłowy, możesz prawdopodobnie zrobić to, czego potrzebujesz, sprytnie manipulując~/.toprc
plikiem.Zakładając, że nie dostosowałeś już wyświetlania
top
(i nie masz~/.toprc
pliku):top
.*
obok niego, którego nie chcesz, naciśnij odpowiednią literę, aby odznaczyć to pole. Na przykład naciśnij, eaby odznaczyćUser Name
pole. Kiedy skończysz, trzeba mieć tylko*
obokProcess Id
,CPU usage
iCommand name/line
.~/.toprc
pliku.top
, a następnie uruchom ponownie, aby sprawdzić, czy ustawienia zostały zapisane.~/.toprc
na coś takiego jak~/min.toprc
przed uruchomieniemtop
. Jeśli chcesz przełączyć się na minimalny układ, zmień nazwę z~/min.toprc
powrotem na~/.toprc
przed uruchomieniemtop
.Ten plik
top
może zostać zmieniony w prosty skrypt powłoki przez kogoś, kto ma więcej doświadczenia i wiedzy niż ja. Będziesz potrzebować szczególnej uwagi, jeśli Twój zwykłytop
układ został już dostosowany.źródło
.toprc
? Chciałbym dodać filtrRUID>999
przy uruchomieniu.