我只想监视 上的进程及其子进程htop
。根据父进程名称进行过滤仅列出父进程,而不列出其子进程。我如何也显示子进程?
答案1
在Linux下,你可以这样做:
htop -p `pstree -p $PID | perl -ne 'push @t, /\((\d+)\)/g; END { print join ",", @t }'`
$PID
根进程在哪里。其工作原理如下:
- 所需进程的列表通过 获得
pstree
,使用-p
选项列出它们及其 PID。 - 输出通过管道传输到 Perl 脚本,该脚本使用正则表达式(此处为 )检索 PID
\((\d+)\)
,并以逗号分隔输出它们。 - 该列表作为 的参数提供
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 上(prolly 也适用于 Linux),对我有用的一个潜在解决方法是为层次结构中的每个进程识别一个搜索短语,并使用htop
sFILTER
模式搜索由 . 分隔的每个术语|
。只要您的搜索模式的一部分捕获了子进程,这就允许实时监视器捕获子进程。
因此,如果您想要监视以下进程层次结构:
top-process-A
\__ subprocess-B
\__ subsubprocess-C
\__ subsubsubprocess-D
使用FILTER
模式A|B|C|D
。
如果模式不太具体,这可能会捕获您不关心的一些其他进程,但它将大大减少当前视口中可见进程的数量。尽管您尝试监视的进程越多,这可能是站不住脚的,特别是如果它们都有不同的名称。