top -c
Topにはすべてのプロセスがリストされています。オプション-uを使用してユーザー名でプロセスをフィルターする良いオプションがありますが、トップ出力のCOMMAND列にリストされているプロセス名に基づいてプロセスをフィルターする簡単な方法があるかどうか疑問に思います。
たとえば、プロセス名のtop -someオプション-substringのようにしたい場合、topはコマンド名にこのサブストリングのみを含むPIDを表示します
Pgrepを使用して、一致するコマンドラインのPIDを取得します。
top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)
top -p
は、カンマで区切られたpidのリストを想定しているため、pgrepで-d','
を使用します。 pgrepの-f
フラグは、プログラム名ではなくコマンドラインと一致させます。
インタラクティブに行うことができます
top -c
を実行した後、ヒット o 列にフィルターを作成します。 COMMAND列に文字列fooが含まれる行を表示するには、COMMAND=foo
と記述します
基本的な出力が必要な場合は、これで十分かもしれません。
top -bc |grep name_of_process
実行中にtop
にフィルターを追加できます。 o キーを押してから、フィルター式を入力します。たとえば、すべてのJavaプロセスを監視するには、フィルター式COMMAND=Java
を使用します。キーをもう一度押すと、複数のフィルターを追加できます。 u キーを押すと、すべてのフィルターをクリアできます = キー。
@perrealのコマンドは素晴らしい働きをします!忘れた場合は、2つのステップで試してください...
例:topをフィルタして、yakuakeというアプリケーションのみを表示します。
$ pgrep yakuake
1755
$ top -p 1755
便利なトップインタラクティブコマンド 'c':フルパスとコマンド名の切り替え 'k':PIDで強制終了 'F':フィルターで...矢印で選択...を押してソートを設定
以下の答えも良いです...私は今日それを探していましたが、それを見つけることができませんでした。ありがとう
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;)
プロセスリストが20プロセスを超えると、ほとんどの答えはここで失敗します。これがtop -p
オプションの制限です。 o
オプションを使用したフィルタリングをサポートしていない古いトップのユーザー向けに、フルスクリーン/コンソール出力を取得するスクリプト可能な例を次に示します(この出力には要約情報がありません)。
__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
次のコードでシェルスクリプトを使用することになりました。
#!/bin/bash
while [ 1 == 1 ]
do
clear
ps auxf |grep -ve "grep" |grep -E "MSG[^\ ]*" --color=auto
sleep 5
done
これはどうですか?
top -c -p <PID>