htop에 하나의 프로세스와 해당 하위 프로세스만 표시하는 방법은 무엇입니까?

htop에 하나의 프로세스와 해당 하위 프로세스만 표시하는 방법은 무엇입니까?

나는 단지 프로세스와 그 하위 프로세스를 모니터링하고 싶습니다 htop. 상위 프로세스 이름을 기준으로 필터링하면 하위 프로세스가 아닌 상위 프로세스만 나열됩니다. 하위 프로세스도 어떻게 표시할 수 있나요?

답변1

Linux에서는 다음을 수행할 수 있습니다.

htop -p `pstree -p $PID | perl -ne 'push @t, /\((\d+)\)/g; END { print join ",", @t }'`

$PID루트 프로세스는 어디에 있습니까? 작동 방식은 다음과 같습니다.

  1. 필수 프로세스 목록은 해당 프로세스와 해당 PID를 나열하는 옵션을 pstree사용 하여 얻습니다.-p
  2. 출력은 정규식(여기)을 사용하여 PID를 검색 \((\d+)\)하고 쉼표로 구분하여 출력하는 Perl 스크립트로 파이프됩니다.
  3. 목록은 매개변수로 제공됩니다 htop -p.

Mac OS와 같은 다른 운영 체제의 경우 PID를 검색하는 정규식을 조정해야 할 수도 있습니다.

참고: 불행하게도 나중에 생성되는 새 하위 키로 목록을 업데이트하는 것은 불가능합니다. htop이 작업이 완료되면 다른 작업을 수행할 수 없기 때문입니다. 이는 htop(현재 버전: 2.0.2)의 제한사항입니다.

답변2

htop -p $(ps -ef | awk -v proc=$PID 'BEGIN{pids[proc]=1;printf "%s",proc} {if(pids[$3]==1){printf ",%s",$2; pids[$2]=1}}')

$PID루트 프로세스 ID는 어디에 있습니까?

awk를 사용하여 지정된 프로세스와 해당 하위 항목의 쉼표로 구분된 목록을 만들고 출력을 htop -p.

답변3

htop -p $(ps -ef | awk -v proc=15305 '$3 == proc { cnt++;if (cnt == 1) { printf "%s",$2 } else { printf ",%s",$2 } }')

awk를 사용하여 ps -ef의 출력에서 ​​쉼표로 구분된 프로세스 ID 목록을 생성하고 상위 프로세스 ID를 proc으로 전달한 다음 이를 htop -p에 전달합니다.

답변4

macOS(대개 Linux에서도 작동함)에서 나에게 효과가 있었던 잠재적인 해결 방법은 계층 구조의 각 프로세스에 대한 검색 문구를 식별하고 htops FILTER패턴을 사용하여 로 구분된 각 용어를 검색하는 것이었습니다 |. 이를 통해 검색 패턴의 일부가 하위 프로세스를 캡처하는 한 실시간 모니터가 하위 프로세스를 캡처할 수 있습니다.

따라서 다음 프로세스 계층 구조를 모니터링하려는 경우:

top-process-A
\__ subprocess-B
    \__ subsubprocess-C
        \__ subsubsubprocess-D

사용 FILTER모드 A|B|C|D.

모드가 너무 구체적이지 않으면 관심 없는 다른 프로세스를 포착할 수 있지만 현재 뷰포트에 표시되는 프로세스 수가 크게 줄어듭니다. 모니터링하려는 프로세스가 많을수록, 특히 이름이 모두 다른 경우에는 이것이 불가능할 수도 있습니다.

관련 정보