TOP 명령의 출력을 특정 프로세스 이름으로 제한
top 명령을 호출하면 실행중인 모든 프로세스를 가져옵니다. 그러나 출력 을 "java"와 같은 특정 프로세스 이름으로 만 제한 하려면 어떻게 해야합니까?
나는 이것을 시도했다 -l 2 | grep java 하지만 이렇게하면 지속적으로 업데이트되는 목록이 아닌 스냅 샷 만 가져옵니다. 그리고 top -l 0 | grep java 는 실제로 명확하지 않습니다.
다음을 선호하므로 실행할 때마다 pid를 조회하지 않고도 대화식으로 top을 사용할 수 있습니다.
top -p `pgrep process-name | tr "\\n" "," | sed 's/,$//'`
물론 프로세스가 변경되면 명령을 다시 실행해야합니다.
설명:
pgrep process-name
줄 바꿈으로 구분 된 프로세스 ID 목록을 반환합니다.tr "\\n" ","
top은 쉼표로 구분 된 프로세스 ID 목록을 원하기 때문에 이러한 줄 바꿈을 쉼표로 변환합니다.sed
스트림 편집기이며sed 's/,$//'
여기에서 후행 쉼표를 제거하는 데 사용됩니다.
모니터링 할 프로세스의 pid를 찾은 다음 명령 -p
에 pid 목록을 제공 할 수 있는 옵션을 사용합니다 top
.
예:
top -p 18884 -p 18892 -p 18919
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
18884 user 25 0 672M 95M 9476 S 0.0 1.1 0:02 1 java
18892 user 25 0 2280M 123M 12252 S 0.0 1.5 0:05 1 java
18919 user 22 0 1492M 198M 28708 S 0.0 2.4 0:07 1 java
(쉼표로 구분 된 목록을 전달할 수도 있습니다.)
방법에 대한 최고 -b | grep 자바
@dogbane의 답변을 확장 pgrep
하면 다음을 수행 하기 위해 명명 된 프로세스에 대한 모든 PID를 얻을 수 있습니다 .
top -p "$(pgrep -d ',' java)"
사용 시계 명령을
watch -d 'top -n1 | grep mysql'
여기 의 답 을 사용하여 하나의 라이너를 만들 수있었습니다
top -pid $(pgrep process_name | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ -pid /g')
이것은 MacOS 10.12 (Sierra)에서 나를 위해 작동합니다.
다음을 사용하여 문제를 해결했습니다.
상단 -n1 -b | grep "프로세스 이름"
이 경우 : -n은 top이 어떤 프로세스를 몇 번이나 표시할지 설정하는
데 사용되고 -b는 모든 pid를 표시하는 데 사용됩니다.
다음과 같은 오류를 방지합니다. top : pid limit (20) exceeded
다음 코드는 watch 명령을 통해 5 초마다 프로세스 목록을 업데이트합니다.
watch -n 5 -t top -b -n 1 -p$(pgrep java | head -20 | tr "\\n" "," | sed 's/,$//')
나는 그것을 실행합니다 (예.) : top -b | egrep -w 'java|mysqld'
.. 같은 이름의 서버에서 실행중인 프로세스가 20 개 이상이라면 도움이되지 않습니다.
최고 -p pgrep oracle | head -n 20 | tr "\\n" "," | sed 's/,$//'
더 많은 자원을 소비하는 다른 프로세스를 놓칠 가능성이 높은 20 개 프로세스의 실시간 출력을 나열하고 제공하려고합니다.
나는 여전히 이것에 대해 더 나은 옵션을 찾고 있습니다.
실제로 찾고 있던 것과 같은 더 구체적인 경우 :
를 들어 자바 프로세스 당신은 또한 사용할 수 jps -q
있다 JPS가 에서 도구입니다 $ JAVA_HOME / 빈은 이 $ PATH에 있어야 그러므로합니다.
나는 OSX에서 이것에 대한 답을 찾기 위해 여기에 왔습니다. 나는 bash와 awk로 내가 원하는 것을 얻었습니다.
topfiltered() {
[[ -z "$1" ]] && return
dump="/tmp/top_dump"
rm -f "$dump"
while :; do
clear
[[ -s "$dump" ]] && head -n $(( $LINES - 1 )) "$dump"
top -l 1 -o cpu -ncols $(( $COLUMNS / 8 )) | awk -v p="$(pgrep -d ' ' $@)" '
BEGIN { split(p, arr); for (k in arr) pids[arr[k]]=1 }
NR<=12 || ($1 in pids)
' >"$dump"
done
}
로깅 모드에서 top을 반복하고 awk로 필터링하여 pgrep의 출력에서 연관 배열을 만듭니다. Awk는 처음 12 행을 인쇄합니다. 여기서 12 행은 열 헤더이고 배열의 키인 pid가있는 모든 행을 인쇄합니다. 덤프 파일은 더보기 쉬운 루프에 사용됩니다.
단지 top -bn 1 | grep java
당신을 위해 트릭을 할 것입니다
아래를 실행하면 콘솔에서 지속적인 업데이트가 제공됩니다.
bcsmc2rtese001 [~]$ echo $SHELL
/bin/bash
bcsmc2rtese001 [~]$ top | grep efare or watch -d 'top | grep efare' or top -p pid
27728 efare 15 0 75184 3180 1124 S 0.3 0.0 728:28.93 tclsh
27728 efare 15 0 75184 3180 1124 S 0.7 0.0 728:28.95 tclsh
지금까지 MacOS를위한 유일한 솔루션 은 다음과 같습니다 .
top -pid `pgrep java | awk 'ORS=" -pid "' | sed 's/.\{6\}$//'`
살아있는 프로세스 invalid option or syntax: -pid
가 없으면 원하지 않게보고 됩니다 java
.
설명
여기에 게시 된 다른 솔루션은 형식을 사용 top -p id1,id2,id3
하지만 MacOS top
는 다루기 힘든 형식 만 지원합니다 top -pid id1 -pid id2 -pid id3
.
So firstly, we obtain the list of process ids which have process name "java":
pgrep java
and we pipe this to awk
which joins the results with delimitor " -pid "
| awk 'ORS=" -pid "'
Alas, this leaves a trailing delimitor! For example, we may so far have obtained the string "123 -pid 456 -pid 789 -pid "
.
We then just use sed
to shave off the final 6 characters of the delimitor.
| sed 's/.\{6\}$//'`
We're ready to pass the results to top
:
top -pid `...`
Using the approach mentioned in the answer by Rick Byers:
top -p `pgrep java | paste -sd "," -`
but I had more than 20 processes running so following command can be helpful for someone who encounter a similar situation.
top -p `pgrep java | head -n 20 | paste -sd "," -`
pgrep
gets the list of processes with given name - java in this case. head
is used to get first 20 pids because top cannot handle more than 20 pids when using -p argument. Finally paste
joins the list of pids with ','.
You can control the process name you are looking for in the above command and the number of processes with that name you are interested to watch. You can ignore the head -n 20
part if the number of your processes with the given name is less than 20.
'programing tip' 카테고리의 다른 글
동적 너비 (CSS)가있는 중앙 고정 div (0) | 2020.10.11 |
---|---|
프로젝트 링크가 Wamp 서버에서 작동하지 않습니다. (0) | 2020.10.11 |
객체를 XML 문자열로 변환 (0) | 2020.10.11 |
textview에서 줄 간격을 늘리는 방법.? (0) | 2020.10.11 |
Javax.net.ssl.SSLHandshakeException : javax.net.ssl.SSLProtocolException : SSL 핸드 셰이크 중단됨 : SSL 라이브러리 실패, 일반적으로 프로토콜 오류 (0) | 2020.10.11 |