如何仅在htop上显示进程及其后代进程?


10

我只想监视一个进程及其上的子进程htop。过滤父进程的名称仅列出父进程,而不列出其子进程。我如何也显示子进程?

Answers:


8

在Linux下,您可以执行以下操作:

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

$PID根进程在哪里?其工作原理如下:

  1. 与获得了想要的进程列表pstree,使用-p选项与他们的PID一一列举。
  2. 输出通过管道传递到Perl脚本,该脚本使用正则表达式(在此为\((\d+)\))检索PID ,然后将其输出并以逗号分隔。
  3. 提供此列表作为的参数htop -p

对于Mac OS等其他操作系统,您可能需要调整检索PID的正则表达式。

注意:不幸的是,无法使用稍后生成的新子项来更新列表,因为一旦htop执行,便无法执行其他任何操作。这是htop(当前版本:2.0.2)的限制。


$PID可以是进程的名称,还是必须是ID?
becko 2015年

@becko $PID必须是pid,但是您可以使用从进程名称中获取ID pgrep
vinc17

5
当新的孩子产生时,这将不会更新...希望在我的tmux会话中使用类似的东西仅监视东西
black_puppydog

@black_puppydog我也是!
becko '16

在使用pstree自制软件的macOS上: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的输出创建逗号分隔的进程ID列表,将父进程ID作为proc传递,然后将其传递给htop -p。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.