프로세스 이름을 기반으로 나열된 프로세스를 필터링하는 Linux의 top -c 명령


149
top -c

Top에는 모든 프로세스가 나열되어 있으며 -u 옵션을 사용하여 사용자 이름으로 프로세스를 필터링하는 좋은 옵션이 있지만 상단 출력의 COMMAND 열에 나열된 프로세스 이름을 기반으로 프로세스를 쉽게 필터링 할 수 있는지 궁금합니다.

예를 들어 processname의 top -some 옵션 -substring을 원하면 top은 명령 이름 에이 하위 문자열 만있는 pid를 표시합니다.

답변:


214

pgrep을 사용하여 pid의 일치하는 명령 줄을 가져옵니다.

top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)

top -p은 쉼표로 구분 된 pid 목록을 기대하므로 -d','pgrep에서 사용 합니다. -fpgrep 의 플래그는 프로그램 이름 대신 명령 행과 일치시킵니다.


12
'string_to_match_in_cmd_line'에 대해 새 프로세스가 생성되면 맨 위에 표시되지 않습니다. top을 종료하고이 명령을 다시 실행해야합니다.
eugenevd

1
eugenevd가 말했듯이, 이것은 top이 호출 된 후 시작된 새로운 프로세스에는 작동하지 않습니다. 그렇게 할 방법이 있습니까? 이름에 동일한 접두사를 사용하여 여러 프로그램을 실행해야하며 매번 새 top (또는 ps)을 실행할 필요없이 라이브 방식으로 실행되는 프로그램 수를 확인하고 싶습니다.
Jester

1
@Jester, eugenevd, 나는 당신과 같은 문제가있었습니다. stackoverflow.com/a/27653841/681830 에서 새 버전을 만들었습니다 . 도움이 되길 바랍니다.
Val

5
나는 top: pid limit (20) exceeded이것을 사용하여 이것을 사용했다 : top -c -p $(pgrep -f string_to_match_in_cmd_line | head -20 | tr "\\n" "," | sed 's/,$//').
f01

115

대화식으로 할 수 있습니다

COMMAND 열에 문자열 foo가 포함 된 행을 표시하기 위해을 실행 한 후 열에 필터를 top -c치고 o씁니다.COMMAND=foo

기본 출력을 원하면 충분할 수 있습니다.

top -bc |grep name_of_process

7
이 날 '-bc 잘못된 옵션 또는 구문'제공
shmim

3
top -bc -n 1 반복 횟수를 1로 제한하므로보다 편리합니다.
galath

1
이것이 정답입니다. 더 정교하고 'top'명령이 제공하는 옵션으로 작동합니다. 그리고 그것은 새로운 과정을 보여줍니다.
Abraham TS

로 프로세스가 계속 사라지고 다시 나타납니다 top -c , hit o and write a filter on a column.
MrR

92

top실행 중에 필터를 추가 할 수 있습니다 . o키를 누른 다음 필터 식을 입력하십시오. 예를 들어, 모든 Java 프로세스를 모니터하려면 필터 표현식을 사용하십시오 COMMAND=java. 키를 다시 누르면 여러 개의 필터를 추가 할 수 있고 키를 사용하여 사용자별로 필터링 할 수 있으며 u키 를 사용하여 모든 필터를 지울 수 있습니다 =.


2
이것은 허용 된 답변보다 더 나은 솔루션입니다 (이 솔루션은 원래보다 3 년 후에 제기되었습니다). 원본과 달리이 솔루션은 실제로 새로 생성 된 프로세스에서도 작동합니다. 주문형으로 생성 된 Apache 프로세스를 모니터링하는 경우 매우 중요합니다.
Nate Lampton

2
실제로 필터가 작동하기 때문에 더 나은 솔루션입니다. 허용 된 솔루션은 top을 실행하기 전에 프로세스 ID를 분석합니다. 결과 프로세스는 top -c -p 920,1345,1346고정되어 있습니다.
Jérôme Gillard

4
o일부 이전 버전의 필터에는 필터로 사용 하는 것이 없습니다. top: procps version 3.2.8사용자 필터가 있으므로 작동합니다.
Manwe

13

@perreal의 명령은 훌륭하게 작동합니다! 잊어 버린 경우 두 단계로 시도하십시오 ...

예 : yakuake라는 응용 프로그램 만 표시하는 필터 상단 :

$ pgrep yakuake
1755

$ top -p 1755

유용한 상단 대화식 명령 'c': 전체 경로와 명령 이름 'k'간 전환 : PID에 의한 종료 'F': 필터링 기준 ... 화살표로 선택 ... 's'를 눌러 정렬

아래 답변도 좋습니다 ... 오늘 그것을 찾고 있었지만 찾을 수 없었습니다. 감사


7

StackOverflow에서 많은 답변을 찾은 후에도 내 요구에 맞는 답변을 보지 못했습니다.

즉, 주어진 키워드로 새로 고침을 유지하기 위해 top 명령을 수행하기 위해 새로운 프로세스가 생성 될 때 CTRL + C / top을 반복 할 필요가 없습니다.

따라서 나는 새로운 것을 만듭니다 ...

다시 시작할 필요가없는 버전입니다.

__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; sleep 1; done;)

__keyword를 수정하면 작동합니다. (우분투 2.6.38 테스트)

2015 년 2 월 14 일 추가 : 위 코드에서 시스템 작업 부하 부분이 누락되었습니다. "부하 평균"부분에 관심이있는 사람들 :

__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; uptime; sleep 1; done;)

시스템 워크로드에 대한 개요가 누락되었습니다. 짧은 프로세스 목록의 경우 잠자기 전에 "가동 시간"을 추가하면 충분합니다.
Sevyls

1
@Sevyls 지적 해 주셔서 감사합니다! 다른 몇 번의 시도 (잘 작동하지 않는)는 사용중인 버전이 가장 좋은 것일 수 있습니다. 답변이 수정되었습니다.
Val

일치하는 하나 이상의 프로세스가 있지만 모든 중지시 "최상위 : 유효하지 않은 사용자"가 표시되면 훌륭하게 작동합니다. 다른 프로세스가 시작되면 복구합니다. Raspbian FYI에서 실행 중입니다. 감사.
Mike

1

이건 어때?

top -c -p <PID>

4
우리는 processname (또는 그 하위 문자열)로 필터링하려고 시도하고 프로세스를 다시 시작할 때 새로운 pid를 얻습니다.
Srujan Kumar Gulla

1

다음 코드와 함께 쉘 스크립트를 사용했습니다.

#!/bin/bash

while [ 1 == 1 ]
do
    clear
    ps auxf |grep -ve "grep" |grep -E "MSG[^\ ]*" --color=auto
    sleep 5
done

1

프로세스 목록이 20 프로세스를 초과하면 대부분의 답변이 실패합니다. 이것이 top -p옵션 한계입니다. o옵션을 사용 하여 필터링을 지원하지 않는 이전 상위 사용자의 경우 전체 화면 / 콘솔 출력을 얻는 스크립트 가능한 예가 있습니다 (요약 정보가이 출력에서 ​​누락 됨).

__keyword="YOUR_FILTER" ; ( FILL=""; for i in  $( seq 1 $(stty size|cut -f1 -d" ")); do FILL=$'\n'$FILL; done ;  while :; do HSIZE=$(( $(stty size|cut -f1 -d" ")  - 1 ));  (top -bcn1 | grep "$__keyword"; echo "$FILL" )|head -n$HSIZE; sleep 1;done )

몇 가지 설명

__keyword = your grep filter keyword
HSIZE=console height
FILL=new lines to fill the screen if list is shorter than console height
top -bcn1 = batch, full commandline, repeat once

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.