htopに1つのプロセスとそのサブプロセスのみを表示する方法は?

htopに1つのプロセスとそのサブプロセスのみを表示する方法は?

私はプロセスとそのサブプロセスを監視したいだけですhtop。親プロセス名に基づいてフィルタリングすると、子プロセスではなく親プロセスのみが一覧表示されます。子プロセスもどのように表示できますか?

答え1

Linuxでは、次のことができます。

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

$PIDルートプロセスはどこにありますか?仕組みは次のとおりです。

  1. 必要なプロセスのリストは、そのプロセスとそのPIDを一覧表示するオプションをpstree使用して取得されます。-p
  2. 出力は、正規表現(ここ)を使用してPIDを検索\((\d+)\)し、コンマで区切って出力するPerlスクリプトにパイプされます。
  3. リストはパラメータとして提供されます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でも動作します)で私に効果があった潜在的な回避策は、階層内の各プロセスの検索フレーズを識別し、htopsFILTERパターンを使用して区切られた各用語を検索することでした|。これにより、検索パターンの一部が子プロセスをキャプチャする限り、リアルタイムモニタは子プロセスをキャプチャできます。

したがって、次のプロセス階層を監視したい場合:

top-process-A
\__ subprocess-B
    \__ subsubprocess-C
        \__ subsubsubprocess-D

使用FILTERモードA|B|C|D

モードがあまりにも具体的でないと、興味のない他のプロセスをキャプチャできますが、現在のビューポートに表示されるプロセスの数が大幅に減少します。監視するプロセスが多いほど、特に名前がすべて異なる場合、これは不可能になる可能性があります。

関連情報