Как отобразить только процесс и его дочерние процессы на htop?

10

Я хочу отслеживать только процесс и его дочерние процессы htop. Фильтрация по имени родительского процесса перечисляет только родительский процесс, но не его дочерние. Как мне показать процессы детей тоже?

becko
источник

Ответы:

8

Под Linux вы можете сделать:

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

где $PIDнаходится корневой процесс. Это работает следующим образом:

  1. Список требуемых процессов получается с pstreeпомощью -pопции, чтобы перечислить их с их PID.
  2. Выходные данные передаются в сценарий Perl, который получает PID с помощью регулярного выражения (здесь \((\d+)\)) и выводит их через запятую.
  3. Этот список предоставляется в качестве аргумента htop -p.

Для других ОС, таких как Mac OS, вам может потребоваться адаптировать регулярное выражение, которое получает PID.

Примечание: к сожалению, невозможно обновить список новыми дочерними элементами, которые появляются позже, потому что, как только htopон был выполнен, никто больше не может делать ничего. Это ограничение htop(текущая версия: 2.0.2).

vinc17
источник
$PIDможет быть именем процесса или идентификатором?
becko
@becko $PIDдолжен быть pid, но вы можете получить идентификатор из названия процесса с помощью pgrep.
vinc17
5
это не будет обновляться, когда появляются новые дети ... хотелось бы использовать sth как это для мониторинга только вещей в моей сессии tmux
black_puppydog
@black_puppydog меня тоже!
Бекко
На macOS с pstreeот homebrew: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 } }')

Используйте awk, чтобы создать разделенный запятыми список идентификаторов процессов из выходных данных ps -ef, передав идентификатор родительского процесса как proc, а затем передав его в htop -p.

Раман Sailopal
источник