82

top コマンドを呼び出すと、実行中のすべてのプロセスが取得されます。しかし、「java」などの特定のプロセス名のみに出力を制限するにはどうすればよいですか?

私はこれを試しました top -l 2 | grep java を使用しますが、この方法ではスナップショットのみを取得し、継続的に更新されるリストは取得しません。そしてトップ -l 0 | grep javaはあまり明確ではありません。

4

18 に答える 18

132

私は次のことを好みます。そうすれば、実行するたびにpidを検索しなくても、topをインタラクティブに使用できます。

top -p `pgrep process-name | tr "\\n" "," | sed 's/,$//'`

もちろん、プロセスが変更された場合は、コマンドを再実行する必要があります。

説明:

  • pgrep process-name改行で区切られたプロセスIDのリストを返します
  • tr "\\n" ","topはプロセスIDのコンマ区切りリストを必要とするため、これらの改行をコンマに変換します
  • sedはストリームエディタであり、sed 's/,$//'ここでは末尾のカンマを削除するために使用されます
于 2011-12-16T15:08:39.990 に答える
54

監視するプロセスの 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

(コンマ区切りのリストを渡すこともできると思います。)

于 2010-09-16T15:25:02.330 に答える
32

トップ -bはどうですか | グレップジャバ

于 2010-09-16T14:48:54.937 に答える
6

監視コマンドを使用する

watch -d 'top -n1 | grep mysql'
于 2010-09-16T14:58:18.037 に答える
2

次のコードは、watch コマンドを使用して 5 秒ごとにプロセスのリストを更新します。

watch -n 5 -t top -b -n 1 -p$(pgrep java | head -20 | tr "\\n" "," | sed 's/,$//')

于 2014-06-18T14:08:19.200 に答える
0

ただtop -bn 1 | grep javaあなたのためにトリックをします

于 2014-11-18T12:05:54.927 に答える
0

私が実際に探していたような、より具体的なケース:

Java プロセスjps -qの場合、jps$JAVA_HOME/binのツールであるため、$PATH にある必要があります。

于 2014-05-20T07:10:14.910 に答える
0

以下を実行すると、コンソールで継続的な更新が行われます。

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
于 2014-05-20T07:54:39.013 に答える
-1

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 未満の場合は、この部分を無視できます。

于 2018-01-30T19:34:17.203 に答える