私はプロセスとそのサブプロセスを監視したいだけですhtop
。親プロセス名に基づいてフィルタリングすると、子プロセスではなく親プロセスのみが一覧表示されます。子プロセスもどのように表示できますか?
答え1
Linuxでは、次のことができます。
htop -p `pstree -p $PID | perl -ne 'push @t, /\((\d+)\)/g; END { print join ",", @t }'`
$PID
ルートプロセスはどこにありますか?仕組みは次のとおりです。
- 必要なプロセスのリストは、そのプロセスとそのPIDを一覧表示するオプションを
pstree
使用して取得されます。-p
- 出力は、正規表現(ここ)を使用してPIDを検索
\((\d+)\)
し、コンマで区切って出力するPerlスクリプトにパイプされます。 - リストはパラメータとして提供されます
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でも動作します)で私に効果があった潜在的な回避策は、階層内の各プロセスの検索フレーズを識別し、htop
sFILTER
パターンを使用して区切られた各用語を検索することでした|
。これにより、検索パターンの一部が子プロセスをキャプチャする限り、リアルタイムモニタは子プロセスをキャプチャできます。
したがって、次のプロセス階層を監視したい場合:
top-process-A
\__ subprocess-B
\__ subsubprocess-C
\__ subsubsubprocess-D
使用FILTER
モードA|B|C|D
。
モードがあまりにも具体的でないと、興味のない他のプロセスをキャプチャできますが、現在のビューポートに表示されるプロセスの数が大幅に減少します。監視するプロセスが多いほど、特に名前がすべて異なる場合、これは不可能になる可能性があります。