回答:
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'
ps
andでこれを行うことができますpgrep
:
ps -fp $(pgrep -d, tty)
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }
それ以外の場合、検索に一致するプロセスがない場合、ps
使用メジラ全体がダンプされます。