Як переглянути конкретний процес вгорі


47

Чи є якісь порівняно чіткі варіанти з верхом для відстеження конкретного процесу?
В ідеалі шляхом ідентифікації процесу за людською читаною цінністю? наприклад chromeабо java.

Іншими словами, я хочу переглянути всю типову інформацію, яку подає верх, але для того, щоб результати були відфільтровані до наданих параметрів, тобто. 'chrome' або 'java'


1
ви пробували top | grep chrome?
Пандія

1
ви також ps -x | chromeможете отримати pid (нехай відображається pid 2034), а потімtop | grep 2034
Pandya

top | grep chromeспрацював чудово - дякую!
Майкл Коулман

@Pandya - також процес, якого я шукав, протікав лише кілька секунд (node.js під час тесту на інтеграцію) - що означало, коли я ps -x | process_nameотримував PID, коли я знову запускав процес, PID був іншим, і тому оригінальний PID не визначив би його.
Майкл Коулман

Відповіді:


24

Ви можете просто використовувати 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.

Виконайте наступну команду, щоб отримати потрібний вихід (ex-chrome):

top | grep chrome

Тут ми використовуємо grepз трубопроводами |так topі grepйдуть паралельно; topвихід, що задається grep(як вхід), і grep chromeфільтрує відповідні рядки chromeдо topзупинки.


1
дякую, я знаю, що інші люди мають свої вподобання, але мені подобається ця відповідь, тому що її легко зрозуміти, а тому її легше запам’ятати і в майбутньому! - Я б відмовився, але мені не вистачає репутації ...
Майкл Коулман

3
Це працює лише в тому випадку, якщо процес знаходиться у відображеному на вершині результаті. Я думаю, що відповідь @ Рамеша повинна бути прийнятою
jb

@JamieBullock питання стосується topлише і ОП хочуть фільтрувати процес на основі top.
Пандія

@Pandya насправді я відкликаю свій попередній коментар, оскільки він був заснований на помилці в моєму коді. І все-таки я думаю, що відповідь @ Рамеша краща (а також фільтрує процес на основі зверху). Я легко можу зламати, наприклад,sleep 10 & top | grep sleep
jb

Мені подобається unix.stackexchange.com/a/165343/48973 краще, тому що він показує заголовки.
Райан

39

З моєї іншої відповіді тут , ви могли б зробити щось на кшталт,

top -p `pgrep "java"`

4
top -p `pgrep "java"`дає мені наступну помилку в оболонці bash top: -p requires argument. top -ppgrep -d ',' "apache2" справді працював для мене, але я не дуже розумів, що робить команда - це спосіб подачі в декількох аргументах до верху?
Майкл Коулман

@Ramesh вам потрібно дати pidрозділити кому списку для роботи.
Каннан Мохан

3
Це правильна відповідь.
j03m

1
+1 Це правильна відповідь. "top | grep Chrome" є доволі варварським, тому що він віддаляє ВСІ ВИХІДУ зверху, не відповідає "Chrome", втрачаючи такі речі, як мітки заголовка та стовпців. Використання підшару з результатом pgrep - це правильне застосування філософії unix.
Джон М Наглік

2
@loretoparisi може бути, тому що селектор, який ви використовуєте, відповідає декільком процесам. Дивіться цю відповідь для команди, яка працює з одним або кількома процесами узгодження.
Майкл Хейс

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

Пояснення:

  1. top -p pid1,pid2: показати кілька відомостей про процес, pid повинен бути розділений на ,
  2. pgrep -d "," java: надрукуйте підписи всієї програми java, вони за замовчуванням розділені новим рядком. використовуйте, -d ","щоб розділити його, ,як того вимагає верх.

Якщо ви бачите помилку типу top: -p argument missing, це означає, що жодна програма java не працює, тобто у pgrep немає виводу.


1
Це рішення працює краще, ніж використовувати лише top -p pgrep "java" ``. спасибі.
loretoparisi

1
Попередити помилку, перевіривши pgrepкод виходу:pids="$(pgrep -d, java)" && top -p "$pids"
syme

12

У OpenBSD topпросто натисніть gі введіть ім'я команди, яку ви хочете відфільтрувати.

В topна Ubuntu , наприклад, натисніть oі введіть , наприклад , COMMAND=chromeщоб показувати тільки записи з COMMANDстовпчика, рівні chrome.

Про Linuxes, що використовує таку ж topреалізацію, як і Ubuntu, прочитайте ФІЛЬТРОВАННЯ в розділі « Вікно» в topпосібнику.


7

Інші хороші відповіді були надані, але я створив сценарій, який я назвав ptop, який добре допомагає мені:

#!/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

Це підтримує декілька імен процесів, які потрібно вказати (як ptop bash chrome), і надає приємніше повідомлення про помилку у випадку, якщо немає / немає жодних із зазначених імен.


3

Якщо ви хочете залишатись topта зберігати всі інші процеси з огляду на контекст, ви можете натиснути, Lщоб знайти свій процес:

Locate string chrome

Це дозволить виділити будь-який процес chromeу назві та привести його до перегляду. Використовуйте &для переходу до наступного матчу.

Ви можете натиснути cдля переключення між відображенням імені процесу та повною командою.


Це ^ тому, що люди RTFM! man top | less +/5d
cprn

0

Ви також можете використовувати фільтр зверху, щоб виділити конкретні процеси. Натисніть "O", щоб відкрити підказку фільтра. Потім введіть фільтр, відформатований як FIELD = значення. Наприклад, для фільтрації всіх процесів tmux використовуйте:

COMMAND=tmux

Використовуйте '=' для скидання фільтрів. Дивіться розділ під назвою "ФІЛЬТРУВАННЯ" у верхній частині сторінки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.