나는 단지 프로세스와 그 하위 프로세스를 모니터링하고 싶습니다 htop
. 상위 프로세스 이름을 기준으로 필터링하면 하위 프로세스가 아닌 상위 프로세스만 나열됩니다. 하위 프로세스도 어떻게 표시할 수 있나요?
답변1
Linux에서는 다음을 수행할 수 있습니다.
htop -p `pstree -p $PID | perl -ne 'push @t, /\((\d+)\)/g; END { print join ",", @t }'`
$PID
루트 프로세스는 어디에 있습니까? 작동 방식은 다음과 같습니다.
- 필수 프로세스 목록은 해당 프로세스와 해당 PID를 나열하는 옵션을
pstree
사용 하여 얻습니다.-p
- 출력은 정규식(여기)을 사용하여 PID를 검색
\((\d+)\)
하고 쉼표로 구분하여 출력하는 Perl 스크립트로 파이프됩니다. - 목록은 매개변수로 제공됩니다
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에서도 작동함)에서 나에게 효과가 있었던 잠재적인 해결 방법은 계층 구조의 각 프로세스에 대한 검색 문구를 식별하고 htop
s FILTER
패턴을 사용하여 로 구분된 각 용어를 검색하는 것이었습니다 |
. 이를 통해 검색 패턴의 일부가 하위 프로세스를 캡처하는 한 실시간 모니터가 하위 프로세스를 캡처할 수 있습니다.
따라서 다음 프로세스 계층 구조를 모니터링하려는 경우:
top-process-A
\__ subprocess-B
\__ subsubprocess-C
\__ subsubsubprocess-D
사용 FILTER
모드 A|B|C|D
.
모드가 너무 구체적이지 않으면 관심 없는 다른 프로세스를 포착할 수 있지만 현재 뷰포트에 표시되는 프로세스 수가 크게 줄어듭니다. 모니터링하려는 프로세스가 많을수록, 특히 이름이 모두 다른 경우에는 이것이 불가능할 수도 있습니다.