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

top -c

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

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



답변

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

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

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


답변

대화식으로 할 수 있습니다

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

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

top -bc |grep name_of_process


답변

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


답변

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

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

$ pgrep yakuake
1755

$ top -p 1755

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

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


답변

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;)


답변

이건 어때?

top -c -p <PID>


답변

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

#!/bin/bash

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