pgrepを取得して完全なプロセス情報を表示する方法


26

取得する方法がありpgrep、私に各プロセスに関するすべての情報を与えるためにpsいますか?パイプで処理できることはわかっpsgrepいますが、それは大量の入力であり、grep処理自体も不要なものです。

回答:


22

pgrepの出力オプションはかなり制限されています。ps重要な情報を引き出すには、ほぼ間違いなくそれを送り返す必要があります。これを自動化するには、でbash関数を使用します~/.bashrc

function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }

次に、コマンドを呼び出します。

ppgrep <pattern>

2
ありがとう!私はそれを次のように変更しました。function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } それ以外の場合、検索に一致するプロセスがない場合、ps使用メジラ全体がダンプされます。
ジョエルファン

OS Xには、psフラグのハイフンを必要とします:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
エリックNomitch

1
psの使用ページを避けたい場合、GNU xargsにはオプションがあり-r、リストを受け取った場合にのみコマンドを実行します。
ダグ

1
より簡潔な方法はps fp $(pgrep -d, "$@")
イゴールミクシキン

14

pgrepps使用して組み合わせてxargsください!

pgrep <your pgrep-criteria> | xargs ps <your ps options> -p

たとえば

pgrep -u user | xargs ps -f -p

の完全なプロセスリストを取得しますuser

最初の行に列名を付けておくと便利です。grep列名は常に削除されます。


優れた!これはxfvbのためのArcGIS Serverの起動スクリプトとの奇妙な問題解決
prusswan

Unixパイプを適切な方法で使用し、1つのツールからPIDのリストを取得して別のツールにフィードバックするため、これは受け入れられた答えであるはずです(ハッカーのように思える場合はそうではありません-この手法はUNIXツールの多くで使用できます) 、email grepツールのように。Bash関数ppgrep()は不必要な依存関係であり、ここで紹介する学習機会に立ち向かうことを避けます。)
Scott Prive

10

以下は、PID +完全なコマンドラインのみを提供します。「すべての情報psは」については、他の回答を参照してください...

ほとんどのLinuxはprocps-ngを使用します。3.3.4(2012年にリリース)以降、pgrep -a--list-full)は完全なコマンドラインを示しています。
注:デフォルトでは、pgrepは実行可能ファイル名に対して指定したパターンとのみ一致します。(grepping psのように)完全なコマンドラインと一致させたい場合は、-f--full)オプションを追加します。

古いバージョン(元のprocpsプロジェクトを含む)では、-lオプションは情報を表示しましたが、動作はさまざまです。

  • pgrep -fl 完全なコマンドラインに対してパターンを照合し、完全なコマンドラインを表示しました。
  • pgrep -l単独で実行可能ファイル名のみが一致し、実行可能ファイル名のみが表示されました。
    完全に一致したくない場合は、完全なコマンドラインを表示できませんでした:-( [ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15 ]

* BSDがどのコードを使用するかはわかりませんが、マニュアルページには古い-fl動作が記載されています。

残念ながら、-fl移植性さえも使用できません。最近のprocps-ngでは、-f--list-name)は常に実行可能ファイル名のみを出力します。


4

Linux

GNUバージョンの(ケース非感受性)はサポートされておらず、長い+ファジー出力を用いて達成されます。pgrep-i-af

$ pgrep -af apache

OUTPUT:
    1748 /usr/sbin/apache2 -k start

マニュアルページ

   -a, --list-full
       List  the  full  command line as well as the process ID.  (pgrep only.)

   -f, --full
       The pattern is normally only matched against the process name.  
       When -f is set, the full command  line is used.

マックOS

OSX(および推論では、BSD)-l長い出力)と組み合わせて-f完全な引数リストと一致)コマンド全体を表示します(-i大文字と小文字を区別しません):

$ pgrep -fil ssh

OUTPUT:
    33770 ssh: abc@192.168.0.123-22 [mux] t

manページ

 -l          Long output.  For pgrep, print the
             process name in addition to the
             process ID for each matching
             process.  If used in conjunction
             with -f, print the process ID and
             the full argument list for each
             matching process.  For pkill, dis-
             play the kill command used for
             each process killed.

1

-vオプションを使用してgrep-要求されたパターンを除くすべてを返します。

ps -ef | grep <process> | grep -v grep

これが私にとって最高の答えでした。それはで起こるように、それは切り捨てられずにあなたの完全なコマンドを示しpgrep -u user | xargs ps -f -p
BringBackCommodore64

0

存在するとは思いませんが、入手できる情報のほとんどは、pgrepの-lオプションを使用した名前とプロセスIDです。

psはあらゆる種類のフォーマットオプションをサポートしているため、入力を保存したいもののエイリアスを作成します。出力からgrepプロセスを除外する簡単な方法は、追加のパイプを含めてgrep -v grepgrepプロセスを除外することです。



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