답변:
pgrep을 사용하여 pid의 일치하는 명령 줄을 가져옵니다.
top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)
top -p
은 쉼표로 구분 된 pid 목록을 기대하므로 -d','
pgrep에서 사용 합니다. -f
pgrep 의 플래그는 프로그램 이름 대신 명령 행과 일치시킵니다.
top: pid limit (20) exceeded
이것을 사용하여 이것을 사용했다 : top -c -p $(pgrep -f string_to_match_in_cmd_line | head -20 | tr "\\n" "," | sed 's/,$//')
.
대화식으로 할 수 있습니다
COMMAND 열에 문자열 foo가 포함 된 행을 표시하기 위해을 실행 한 후 열에 필터를 top -c
치고 o씁니다.COMMAND=foo
기본 출력을 원하면 충분할 수 있습니다.
top -bc |grep name_of_process
top -bc -n 1
반복 횟수를 1로 제한하므로보다 편리합니다.
top -c , hit o and write a filter on a column
.
top
실행 중에 필터를 추가 할 수 있습니다 . o키를 누른 다음 필터 식을 입력하십시오. 예를 들어, 모든 Java 프로세스를 모니터하려면 필터 표현식을 사용하십시오 COMMAND=java
. 키를 다시 누르면 여러 개의 필터를 추가 할 수 있고 키를 사용하여 사용자별로 필터링 할 수 있으며 u키 를 사용하여 모든 필터를 지울 수 있습니다 =.
top -c -p 920,1345,1346
고정되어 있습니다.
o
일부 이전 버전의 필터에는 필터로 사용 하는 것이 없습니다. top: procps version 3.2.8
사용자 필터가 있으므로 작동합니다.
@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>
프로세스 목록이 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