Jak wyświetlić tylko proces i jego procesy potomne na htopie?

10

Chcę monitorować tylko proces i jego procesy potomne htop. Filtrowanie według nazwy procesu nadrzędnego wyświetla tylko proces nadrzędny, a nie jego procesy potomne. Jak mogę również pokazać procesy potomne?

becko
źródło

Odpowiedzi:

8

Pod Linuksem możesz:

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

gdzie $PIDjest proces rootowania. Działa to w następujący sposób:

  1. Lista pożądanych procesów jest uzyskiwana za pstreepomocą -popcji, aby wyświetlić je wraz z ich PID.
  2. Dane wyjściowe są przesyłane strumieniowo do skryptu Perla, który pobiera identyfikatory PID za pomocą wyrażenia regularnego (tutaj \((\d+)\)) i wysyła je oddzielone przecinkami.
  3. Ta lista jest podana jako argument htop -p.

W przypadku innych systemów operacyjnych, takich jak Mac OS, może być konieczne dostosowanie wyrażenia regularnego, które pobiera PID.

Uwaga: nie można niestety zaktualizować listy o nowe dzieci, które odradzają się później, ponieważ po htopwykonaniu nie można nic więcej zrobić. Jest to ograniczenie htop(aktualna wersja: 2.0.2).

vinc17
źródło
$PIDmoże to być nazwa procesu lub musi to być identyfikator?
becko,
@becko $PIDmusi być pid, ale identyfikator można uzyskać z nazwy procesu za pomocą pgrep.
vinc17
5
to się nie zaktualizuje, gdy pojawią się nowe dzieci ... chciałbym użyć czegoś takiego jak do monitorowania tylko rzeczy w mojej sesji
tmux
@black_puppydog ja też!
becko
Na macOS z pstreehomebrew:htop -p `pstree -p $PID | perl -ne 'push @t, /--- (\d+) /g; END { print join ",", @t }'`
jpsim
0
htop -p $(ps -ef | awk -v proc=15305 '$3 == proc { cnt++;if (cnt == 1) { printf "%s",$2 } else { printf ",%s",$2 } }')

Użyj awk, aby utworzyć oddzieloną przecinkami listę identyfikatorów procesów na podstawie wyniku ps -ef, przekazując nadrzędny identyfikator procesu jako proc, a następnie przekazując go do htop -p.

Raman Sailopal
źródło