특정 프로세스를 상단에서 보는 방법


47

특정 프로세스를 추적하는 데 가장 적합한 옵션이 있습니까?
사람이 읽을 수있는 값으로 프로세스를 식별하는 것이 이상적입니까? 예를 들어 chrome또는 java.

즉, 상단에서 제공하는 모든 일반적인 정보를보고 싶지만 결과가 제공된 매개 변수로 필터링됩니다. 'chrome'또는 'java'


1
당신은 시도 top | grep chrome했습니까?
Pandya

1
당신은 또한 ps -x | chromepid를 얻는 데 사용할 수 있습니다 (pid를 보여 주십시오 2034)top | grep 2034
Pandya

top | grep chrome완벽하게 작동했습니다-감사합니다!
Michael Coleman

@Pandya-또한 찾고있는 프로세스는 몇 초 동안 만 실행되었습니다 (통합 테스트 중 node.js) ps -x | process_name-PID를 얻는 데 사용 했을 때, 프로세스를 다시 실행할 때 PID가 달랐습니다. 원래 PID는이를 식별하지 못합니다.
Michael Coleman

답변:


24

간단하게 사용할 수 있습니다 grep:

NAME
       grep, egrep, fgrep, rgrep - print lines matching a pattern

SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION
       grep  searches  the  named  input  FILEs (or standard input if no files are named, or if a single
       hyphen-minus (-) is given as file name) for lines containing a match to the  given  PATTERN.   By
       default, grep prints the matching lines.

다음 명령을 실행하여 원하는 출력 (예 : 크롬)을 얻으십시오.

top | grep chrome

여기에 우리가 사용하는 grep파이프 라인 |그래서 topgrep실행 병렬; top출력은 grep(입력으로) 주어질 때까지 grep chrome일치하는 라인을 필터링 합니다.chrometop


1
고마워, 나는 다른 사람들이 선호하는 것을 알고 있지만, 이해하기 쉽고 앞으로도 기억하기 쉽기 때문에이 답변을 좋아합니다! - 내가 upvoted 것입니다하지만 난 충분히 명성을 가지고 있겠지 ...
마이클 콜맨

2
프로세스가 맨 위에 표시된 출력에있는 경우에만 작동합니다. @Ramesh의 답변이 받아 들여 져야한다고 생각합니다
jb

@JamieBullock은 질문 top만 처리하고 OP는에 따라 프로세스를 필터링하려고합니다 top.
Pandya

@ Pandya, 실제로 내 코드의 실수를 기반으로 한 이전 주석을 철회합니다. 여전히 @Ramesh의 대답이 더 낫다고 생각합니다 (그리고 상단을 기반으로 프로세스를 필터링합니다). 예를 들어sleep 10 & top | grep sleep
jb

같은 I unix.stackexchange.com/a/165343/48973 더는 헤더를 보여주고 있기 때문이다.
Ryan

39

내 다른 대답 에서 , 당신은 다음과 같은 것을 할 수 있습니다.

top -p `pgrep "java"`

4
top -p `pgrep "java"`bash 쉘에서 다음과 같은 오류가 발생 top: -p requires argument합니다. top -ppgrep -d ',' "apache2" 는 나를 위해 일했지만 실제로 명령이 무엇을했는지 이해하지 못했습니다. 여러 인수를 맨 위로 넘기는 방법입니까?
Michael Coleman

@Ramesh 당신은 pid작동 하도록 목록 쉼표를 구분해야합니다.
Kannan Mohan

3
이것이 정답입니다.
j03m

1
+1 정답입니다. "top | grep Chrome"은 머리글 및 열 레이블과 같은 항목을 잃어버린 "Chrome"과 일치하지 않는 모든 출력을 맨 위로 가져옵니다. pgrep의 출력과 함께 서브 쉘을 사용하는 것은 유닉스 철학의 올바른 적용입니다.
John M Naglick

2
@loretoparisi 사용중인 선택기가 여러 프로세스와 일치하기 때문일 수 있습니다. 하나 이상의 일치하는 프로세스에서 작동하는 명령에 대해서는 이 답변 을 참조하십시오 .
Michael Hays

21
top -p `pgrep -d "," java`

설명:

  1. top -p pid1,pid2: 여러 프로세스 정보를 표시합니다. pid는 ,
  2. pgrep -d "," java: 모든 Java 프로그램의 pid를 인쇄합니다. pid는 기본적으로 줄 바꿈으로 구분됩니다. 를 사용하여 상단에 필요한대로 -d ","분리하십시오 ,.

와 같은 오류가 표시되면 top: -p argument missingJava 프로그램이 실행되고 있지 않은 것입니다. 즉 pgrep에 출력이 없습니다.


1
이 솔루션은 top -p pgrep "java"``를 사용하는 것보다 낫습니다 . 감사합니다.
loretoparisi

1
pgrep종료 코드 를 확인하여 오류 방지 :pids="$(pgrep -d, java)" && top -p "$pids"
syme

12

OpenBSD에서을 top누르고 g필터링하려는 명령 이름을 입력하십시오.

top를 들어 Ubuntu에서 oeg COMMAND=chrome를 입력하고 같은 COMMAND열의 항목 만 표시합니다 chrome.

topUbuntu 와 동일한 구현 을 사용하는 Linux에서는 설명서 의 FILTERING in a Window 섹션을 읽으십시오 top.


7

다른 좋은 답변이 제공되었지만, 얼마 전에 ptop이라는 스크립트를 만들었습니다.

#!/bin/sh
top -p $(pidof "$@" |sed s#\ #,#g) 2>/dev/null
if [ $? -ne 0 ]; then
  echo No processes with the specified name\(s\) were found
fi

이것은 (와 같은 ptop bash chrome) 여러 프로세스 이름이 지정되도록 지원 하며 지정된 이름이 실행중인 프로세스가 없거나없는 경우 더 좋은 오류 메시지를 제공합니다.


3

당신이에 체류하려는 경우 top와 컨텍스트보기에서 다른 모든 프로세스를 유지, 당신은 눌러 L프로세스를 검색 :

Locate string chrome

chrome이름에있는 모든 프로세스를 강조 표시 하여 볼 수있게합니다. 사용 &다음 경기로 이동합니다.

을 눌러 c프로세스 이름과 전체 명령 표시를 전환 할 수 있습니다 .


이것은 RTFM 사람들이기 때문에 ^! man top | less +/5d
cprn

0

필터를 맨 위에 사용하여 특정 프로세스를 분리 할 수도 있습니다. 'O'를 눌러 필터 프롬프트를 불러옵니다. 그런 다음 FIELD = value 형식의 필터를 입력하십시오. 예를 들어, 모든 tmux 프로세스를 필터링하려면 다음을 사용하십시오.

COMMAND=tmux

'='를 사용하여 필터를 재설정하십시오. 맨 페이지의 'FILTERING'섹션을 참조하십시오.

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