回答:
pgrepの出力オプションはかなり制限されています。ps重要な情報を引き出すには、ほぼ間違いなくそれを送り返す必要があります。これを自動化するには、でbash関数を使用します~/.bashrc。
function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }
次に、コマンドを呼び出します。
ppgrep <pattern>
psフラグのハイフンを必要とします:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r、リストを受け取った場合にのみコマンドを実行します。
ps fp $(pgrep -d, "$@")
pgrepをps使用して組み合わせてxargsください!
pgrep <your pgrep-criteria> | xargs ps <your ps options> -p
たとえば
pgrep -u user | xargs ps -f -p
の完全なプロセスリストを取得しますuser。
最初の行に列名を付けておくと便利です。grep列名は常に削除されます。
以下は、PID +完全なコマンドラインのみを提供します。「すべての情報psは」については、他の回答を参照してください...
ほとんどのLinuxはprocps-ngを使用します。3.3.4(2012年にリリース)以降、pgrep -a(--list-full)は完全なコマンドラインを示しています。
注:デフォルトでは、pgrepは実行可能ファイル名に対して指定したパターンとのみ一致します。(grepping psのように)完全なコマンドラインと一致させたい場合は、-f(--full)オプションを追加します。
古いバージョン(元のprocpsプロジェクトを含む)では、-lオプションは情報を表示しましたが、動作はさまざまです。
pgrep -fl 完全なコマンドラインに対してパターンを照合し、完全なコマンドラインを表示しました。pgrep -l単独で実行可能ファイル名のみが一致し、実行可能ファイル名のみが表示されました。* BSDがどのコードを使用するかはわかりませんが、マニュアルページには古い-fl動作が記載されています。
残念ながら、-fl移植性さえも使用できません。最近のprocps-ngでは、-f(--list-name)は常に実行可能ファイル名のみを出力します。
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.
OSX(および推論では、BSD)-l(長い出力)と組み合わせて-f(完全な引数リストと一致)コマンド全体を表示します(-i大文字と小文字を区別しません):
$ pgrep -fil ssh
OUTPUT:
33770 ssh: abc@192.168.0.123-22 [mux] t
-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.
-vオプションを使用してgrep-要求されたパターンを除くすべてを返します。
ps -ef | grep <process> | grep -v grep
pgrep -u user | xargs ps -f -p
grepプロセスを排除するために、パターンの一部としてブラケットを使用できます。
ps -ef | grep '[t]ty'
psandでこれを行うことができますpgrep:
ps -fp $(pgrep -d, tty)
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }それ以外の場合、検索に一致するプロセスがない場合、ps使用メジラ全体がダンプされます。