回答:
pgrepを使用して、一致するコマンドラインのpidを取得します。
top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)
top -p
はpidのコンマ区切りのリストを想定しているため-d','
、pgrepで使用します。-f
pgrep のフラグは、プログラム名ではなくコマンドラインと一致させます。
top: pid limit (20) exceeded
ので、これを使用しました:top -c -p $(pgrep -f string_to_match_in_cmd_line | head -20 | tr "\\n" "," | sed 's/,$//')
。
インタラクティブに行うことができます
を実行した後、列にフィルタをtop -c
ヒットoして書き込みます。たとえば、COMMAND列に文字列fooが含まれている行を表示するには、次のように書き込みます。COMMAND=foo
基本的な出力だけが必要な場合は、これで十分です。
top -bc |grep name_of_process
top -bc -n 1
それは1に反復の数を制限するように、より便利である
top -c , hit o and write a filter on a column
ます。
top
実行中にフィルターを追加できoます。キーを押してフィルター式を入力するだけです。たとえば、すべてのJavaプロセスを監視するには、フィルター式を使用しますCOMMAND=java
。キーをもう一度押すことで複数のフィルターを追加でき、uキーでユーザー別にフィルターでき、キーですべてのフィルターをクリアでき=ます。
top -c -p 920,1345,1346
、修正されたようなものです。
o
topの一部の(古い)バージョンでは、フィルターとしての使用は存在しません。top: procps version 3.2.8
ユーザーフィルターが存在するため、機能します。
@perrealのコマンドは素晴らしい働きをします!忘れた場合は、2つのステップで試してください...
例:topをフィルタリングして、yakuakeというアプリケーションのみを表示します。
$ pgrep yakuake
1755
$ top -p 1755
便利なトップインタラクティブコマンド 'c':フルパスとコマンド名の切り替え 'k':PIDによるkill 'F':フィルター...矢印で選択...次に 's'を押して並べ替えを設定
以下の答えもいいです...今日はそれを探していましたが見つかりませんでした。ありがとう
StackOverflowで非常に多くの答えを探した後、自分のニーズに合う答えを見つけていません。
つまり、topコマンドを指定したキーワードで更新し続けるようにします。新しいプロセスが起動するときに、CTRL + C / topを何度も繰り返す必要はありません。
したがって、私は新しいものを作ります...
ここに再起動不要のバージョンがあります。
__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; sleep 1; done;)
__keywordを変更すれば動作するはずです。(Ubuntu 2.6.38テスト済み)
2.14.2015を追加:上記のコードでシステムワークロードの部分が欠落しています。「負荷平均」の部分を気にする人のために:
__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; uptime; sleep 1; done;)
これはどうですか?
top -c -p <PID>
プロセスリストが20プロセスを超えると、ほとんどの回答はここで失敗します。それはtop -p
オプションの制限です。o
オプションでのフィルタリングをサポートしていない古いtopを持つ人のために、全画面/コンソール出力を取得するスクリプト可能な例を次に示します(この出力には要約情報がありません)。
__keyword="YOUR_FILTER" ; ( FILL=""; for i in $( seq 1 $(stty size|cut -f1 -d" ")); do FILL=$'\n'$FILL; done ; while :; do HSIZE=$(( $(stty size|cut -f1 -d" ") - 1 )); (top -bcn1 | grep "$__keyword"; echo "$FILL" )|head -n$HSIZE; sleep 1;done )
いくつかの説明
__keyword = your grep filter keyword
HSIZE=console height
FILL=new lines to fill the screen if list is shorter than console height
top -bcn1 = batch, full commandline, repeat once