特定のプロセスを一番上に表示する方法


47

特定のプロセスを追跡するためのtopを備えた比較的明快なオプションはありますか?
理想的には、人間が読める値でプロセスを特定することによって?例chromeまたはjava

言い換えると、topが提供するすべての典型的な情報を表示したいのですが、結果は提供されたパラメーターにフィルターされます。「chrome」または「java」


1
試しましたtop | grep chromeか?
パンディア14年

1
あなたも使用することができるps -x | chrome(図示せPID PIDを取得するために2034当時)とtop | grep 2034
Pandya

top | grep chrome完璧に働いた-ありがとう!
マイケルコールマン14年

@Pandya-また、私が探していたプロセスは数秒間しか実行しませんでした(統合テスト中にnode.js)-つまりps -x | process_name、PIDを取得するのに使用したとき、プロセスを再度実行したときにPIDが異なっていたため、元のPIDはそれを識別しません。
マイケルコールマン14年

回答:


24

単に使用できますgrep

NAME
       grep, egrep, fgrep, rgrep - print lines matching a pattern

SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION
       grep  searches  the  named  input  FILEs (or standard input if no files are named, or if a single
       hyphen-minus (-) is given as file name) for lines containing a match to the  given  PATTERN.   By
       default, grep prints the matching lines.

次のコマンドを実行して、必要な出力を取得します(ex-chrome):

top | grep chrome

ここでは、使用しているgrepパイプラインで|そうtopgrepラン並列; (入力として)にtop出力を与え、一致する行を停止するまでフィルタリングします。grepgrep chromechrometop


1
おかげで、私は他の人が好みを持っていることを知っていますが、この答えは理解しやすいので気に入っています。-私はupvotedているだろうが、私は十分な評判を持っていけない...
マイケル・コールマン

3
これは、プロセスが上部の表示出力にある場合にのみ機能します。@Rameshの答えは受け入れられるべきだと思う
-jb

@JamieBullockは質問topのみを処理し、OPはに基づいてプロセスをフィルタリングしますtop
パンディア

実際、@ Pandyaは、コードの誤りに基づいていたため、以前のコメントを取り消しました。それでも、@ Rameshの答えの方が優れていると思います(また、トップに基づいてプロセスをフィルタリングします)。私は簡単にあなたの例を破ることができるsleep 10 & top | grep sleep
JB

ヘッダーが表示されるため、unix.stackexchange.com / a / 165343/48973の方が好きです
ライアン

39

ここでの他の答えから、あなたは次のようなことができます、

top -p `pgrep "java"`

4
top -p `pgrep "java"`bashシェルで次のエラーが表示されますtop: -p requires argumenttop -ppgrep -d ',' "apache2"は機能しましたが、コマンドが何をしているのか本当に理解していませんでした-複数の引数をtopに渡す方法ですか?
マイケルコールマン14年

@Rameshは、pidリストをコンマで区切って機能させる必要があります。
カンナンモハン14

3
これは正しい答えです。
j03m 16

1
+1これは正解です。「top | grep Chrome」はやや野isです。なぜなら、「Chrome」に一致しない上からすべての出力を奪い取ってしまい、ヘッダーや列のラベルなどを失ってしまうからです。pgrepからの出力でサブシェルを使用することは、UNIX哲学の正しい応用です。
ジョンMナグリック

2
@loretoparisiは、使用しているセレクターが複数のプロセスに一致している可能性があります。1つ以上の一致するプロセスで機能するコマンドについては、この回答を参照してください。
マイケルヘイズ

21
top -p `pgrep -d "," java`

説明:

  1. top -p pid1,pid2:複数のプロセス情報を表示します。pidは ,
  2. pgrep -d "," java:すべてのJavaプログラムのPIDを出力します。PIDはデフォルトで改行で区切られています。を使用し-d ",",、上部の必要に応じて区切ります。

のようなエラーが表示された場合top: -p argument missing、Javaプログラムが実行されていないこと、つまりpgrepに出力がないことを意味します。


1
このソリューションは、top -p pgrep "java" ``のみを使用するよりもうまく機能します。ありがとうございました。
ロレトパリシ

1
pgrepの終了コードを確認してエラーを防止しますpids="$(pgrep -d, java)" && top -p "$pids"
。– syme

12

OpenBSD topでは、を押しgてフィルタリングするコマンド名を入力します。

ではtop例えばUbuntuの上、プレスoおよび例えば入力COMMAND=chromeのみのエントリを表示するCOMMANDに等しい列chrome

topUbuntu と同じ実装を使用するLinuxでは、マニュアルの「ウィンドウでフィルタリング」セクションをお読みくださいtop


7

他の良い答えが提供されましたが、私はしばらく前にスクリプトを作成しました。

#!/bin/sh
top -p $(pidof "$@" |sed s#\ #,#g) 2>/dev/null
if [ $? -ne 0 ]; then
  echo No processes with the specified name\(s\) were found
fi

これにより、複数のプロセス名の指定がサポートされ(などptop bash chrome)、指定された名前のいずれかが実行されているプロセスがない場合に、より良いエラーメッセージが表示されます。


3

topコンテキスト内に残り、他のすべてのプロセスを表示したい場合は、を押しLてプロセスを検索できます。

Locate string chrome

これchromeにより、名前に含まれるプロセスが強調表示され、表示されます。&次の試合に行くために使用します。

を押すcと、プロセス名の表示と完全なコマンドの表示を切り替えることができます。


RT ^人だからです!man top | less +/5d
cprn

0

上部のフィルターを使用して、特定のプロセスを分離することもできます。「O」を押して、フィルタープロンプトを表示します。次に、FIELD = valueとしてフォーマットされたフィルターを入力します。たとえば、すべてのtmuxプロセスをフィルタリングするには、次を使用します。

COMMAND=tmux

「=」を使用してフィルターをリセットします。トップマニュアルページの「フィルタリング」というセクションをご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.