top コマンドを呼び出すと、実行中のすべてのプロセスが取得されます。しかし、「java」などの特定のプロセス名のみに出力を制限するにはどうすればよいですか?
私はこれを試しました top -l 2 | grep java を使用しますが、この方法ではスナップショットのみを取得し、継続的に更新されるリストは取得しません。そしてトップ -l 0 | grep javaはあまり明確ではありません。
top コマンドを呼び出すと、実行中のすべてのプロセスが取得されます。しかし、「java」などの特定のプロセス名のみに出力を制限するにはどうすればよいですか?
私はこれを試しました top -l 2 | grep java を使用しますが、この方法ではスナップショットのみを取得し、継続的に更新されるリストは取得しません。そしてトップ -l 0 | grep javaはあまり明確ではありません。
私は次のことを好みます。そうすれば、実行するたびにpidを検索しなくても、topをインタラクティブに使用できます。
top -p `pgrep process-name | tr "\\n" "," | sed 's/,$//'`
もちろん、プロセスが変更された場合は、コマンドを再実行する必要があります。
説明:
pgrep process-name改行で区切られたプロセスIDのリストを返しますtr "\\n" ","topはプロセスIDのコンマ区切りリストを必要とするため、これらの改行をコンマに変換しますsedはストリームエディタであり、sed 's/,$//'ここでは末尾のカンマを削除するために使用されます監視するプロセスの pid を見つけて-pから、コマンドに pid のリストを提供できるオプションを使用しますtop。
例:
top -p 18884 -p 18892 -p 18919
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
18884 user 25 0 672M 95M 9476 S 0.0 1.1 0:02 1 java
18892 user 25 0 2280M 123M 12252 S 0.0 1.5 0:05 1 java
18919 user 22 0 1492M 198M 28708 S 0.0 2.4 0:07 1 java
(コンマ区切りのリストを渡すこともできると思います。)
トップ -bはどうですか | グレップジャバ
監視コマンドを使用する
watch -d 'top -n1 | grep mysql'
次のコードは、watch コマンドを使用して 5 秒ごとにプロセスのリストを更新します。
watch -n 5 -t top -b -n 1 -p$(pgrep java | head -20 | tr "\\n" "," | sed 's/,$//')
ただtop -bn 1 | grep javaあなたのためにトリックをします
私が実際に探していたような、より具体的なケース:
Java プロセスjps -qの場合、jpsは$JAVA_HOME/binのツールであるため、$PATH にある必要があります。
以下を実行すると、コンソールで継続的な更新が行われます。
bcsmc2rtese001 [~]$ echo $SHELL
/bin/bash
bcsmc2rtese001 [~]$ top | grep efare or watch -d 'top | grep efare' or top -p pid
27728 efare 15 0 75184 3180 1124 S 0.3 0.0 728:28.93 tclsh
27728 efare 15 0 75184 3180 1124 S 0.7 0.0 728:28.95 tclsh
Rick Byers の回答に記載されているアプローチを使用します。
top -p `pgrep java | paste -sd "," -`
しかし、私は20を超えるプロセスを実行していたので、次のコマンドは同様の状況に遭遇した人にとって役立ちます.
top -p `pgrep java | head -n 20 | paste -sd "," -`
pgrep指定された名前 (この場合は java) を持つプロセスのリストを取得します。head-p 引数を使用する場合、top は 20 個を超える pid を処理できないため、最初の 20 個の pid を取得するために使用されます。最後pasteに、pid のリストを「,」で結合します。
上記のコマンドで探しているプロセス名と、監視したいその名前のプロセスの数を制御できます。head -n 20指定された名前のプロセスの数が 20 未満の場合は、この部分を無視できます。