pgrep
を取得して、ps
が行う各プロセスに関するすべての情報を入手する方法はありますか? ps
からgrep
までをパイプ処理できることはわかっていますが、これは多くの入力が必要で、grep
プロセス自体も不要です。
pgrep
の出力オプションはかなり制限されています。重要な情報を入手するには、ほぼ間違いなくps
を介して送り返す必要があります。 ~/.bashrc
でbash関数を使用して、これを自動化できます。
function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }
次に、コマンドを呼び出します。
ppgrep <pattern>
pgrep
とps
を使用してxargs
を結合します!
pgrep <your pgrep-criteria> | xargs ps <your ps options> -p
たとえば試してみてください
pgrep -u user | xargs ps -f -p
user
の完全なプロセスリストを取得します。オプション-u user
pgrep
オプションを_ [数値または名前として)指定されたユーザーに制限し、ps
オプション-f -p
選択したPIDの完全な形式のリストを要求します。
最初の行を列名のままにしておくのは良いことです。 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が使用するコードはわかりませんが、それらの man page は古い-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
(long output)を-f
(と組み合わせて完全一致引数リスト)は完全なコマンドを表示します(-i
は大文字と小文字を区別しません):
$ pgrep -fil ssh
OUTPUT:
33770 ssh: [email protected] [mux] t
man page :
-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に-lオプションを使用することで取得できるほとんどの情報は、名前とプロセスIDです。
psはあらゆる種類のフォーマットオプションをサポートしているので、入力内容を保存するためのエイリアスを作成するだけです。 grepプロセスを出力から除外する簡単な方法は、grep -v grep
への追加のパイプを含めて、grepプロセスを除外することです。
grep
プロセスを排除するために、パターンの一部としてブラケットを使用できます。
ps -ef | grep '[t]ty'
これは、ps
およびpgrep
を使用して実行できます。
ps -fp $(pgrep -d, tty)