[macos] 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