【 pgrep 】コマンド――プロセス名や属性からプロセスIDを探すLinux基本コマンドTips(131)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセス名やユーザー名などの属性からプロセスIDを探す「pgrep」コマンドです。

» 2017年07月28日 05時00分 公開
[西村めぐみ@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介してきます。今回は、プロセス名やユーザー名などの属性からプロセスIDを探す「pgrep」コマンドです。

pgrepコマンドとは?

 実行中のプロセスの中から、プロセス名やユーザー、グループ、端末名などを表すパターンを使ってプロセスIDを探すコマンドです。パターンには拡張正規表現(第10回)を使用できます。

 コマンド名からプロセスIDを探す際には、pidofコマンドを使うこともできます。



pgrepコマンドの書式

pgrep [オプション] [プロセス名などのパターン]

※[ ]は省略可能な引数を示しています。オプションかパターンのどちらかの指定が必要です。





pgrepの主なオプション

短いオプション 長いオプション 意味
-a --list-full プロセスIDとともにコマンドラインも表示する(「-l」より優先される)
-c --count 該当したプロセスの個数のみを表示する
-d 区切り --delimiter 区切り 複数のプロセスIDを表示する際の区切りとする文字列を指定(デフォルトは改行)
-f --full コマンドライン全体をパターンマッチの対象とする
-F ファイル名 --pidfile ファイル名 プロセスIDをファイルから読み出す
-g グループID --pgroup グループID 指定したプロセスグループのいずれかに属するプロセスを対象とする。グループIDは「,」区切りで複数指定可能で、「0」はpgrep自身のプロセスグループと見なされる
-G グループ --group グループ 指定した実グループ(real group ID)によるプロセスを対象とする。グループは名前またはIDで指定し、「,」区切りで複数指定可能
-l --list-name プロセスIDとともにプロセス名も表示する(「-a」が優先する)
-L --logpidfile 「-F」で指定したファイルがロックされていなかったら終了する(failで終了する)
-n --newest 対象のプロセスから最も新しく起動されたものだけを表示する
--ns プロセスID 指定したプロセスIDの名前空間(namespace)を対象とする
--nslist 指定 指定した名前空間を対象とする。ipc、mnt、net、pid、user、utsを指定可能
-o --oldest 対象のプロセスから最も昔に起動されたものだけを表示する
-P プロセスID --parent プロセスID 指定したプロセスIDが親であるプロセスを対象とする。プロセスIDは「,」区切りで複数指定可能
-s セッションID --session セッションID 指定したセッションIDであるプロセスを対象とする。セッションIDは「,」区切りで複数指定可能、「0」はpgrep自身のセッションIDと見なされる
-t 端末 --terminal 端末 指定した端末で実行されているプロセスを対象とする。端末は「tty1」など、/dev/抜きで指定し、「,」区切りで複数指定可能
-u ユーザー --euid ユーザー 指定した実効ユーザー(effective user)によるプロセスを対象とする。ユーザーは名前またはIDで指定し、「,」区切りで複数指定可能
-U ユーザー --uid ユーザー 指定した実ユーザー(real user)によるプロセスを対象とする。ユーザーは名前またはIDで指定し、「,」区切りで複数指定可能
-v --inverse 検索パターンの否定
-w --lightweight 全てのスレッドID(TID)を表示する
-x --exact プロセス名(「-f」使用時はコマンドライン)と完全に一致(マッチ)したものを対象とする


プロセス名からプロセスIDを検索する

 「pgrep man」でプロセス名にmanを含む全てのプロセスのIDを表示します。デフォルトではプロセスIDのみを表示します。「-l」でプロセス名を、「-a」でコマンドラインも一緒に表示します(コマンド実行例1画面1)。

 ここでの指定は拡張正規表現です。例えば「pgrep gdm」と指定すると、プロセス名にgdmを含むものが対象となります。プロセス名と一致させたい場合は「pgrep "^gdm$"」のようにするか、「-x」オプションを使い「pgrep -x gdm」とします(コマンド実行例2画面2)。

 「-f」オプションを使うと、パターンマッチの対象をプロセス名ではなく、コマンドライン全体とします。

コマンド実行例1

pgrep man

(プロセス名に「man」を含むプロセスのIDを表示)

pgrep -l man

(同時にプロセス名も表示(「ps -o pid,comm」相当))

pgrep -a man

(同時にコマンドラインも表示「ps -o pid,args」相当)


画面1 画面1 pgrepコマンドを実行したところ プロセス名にmanを含むプロセスの情報を表示している

コマンド実行例2

pgrep -a gdm

(プロセス名に「gdm」を含むプロセス(「-a」でコマンドラインを表示))

pgrep -a "^gdm"

(プロセス名が「gdm」と一致するプロセスを表示)

pgrep -ax gdm

(プロセス名が「gdm」と一致するプロセスを表示)

pgrep -af gdm

(コマンドラインを含めて「gdm」を含むプロセスを表示)


画面2 画面2 拡張正規表現を用いてpgrepコマンドを実行したところ


ユーザー名を指定する

 「pgrep -u ユーザー」で、プロセスを所有するユーザーを限定できます(画面3)。指定にはユーザー名やユーザーIDを使用できます。複数指定したい場合は「-u ユーザー1,ユーザー2,ユーザー3」のように「,」で区切ります。

コマンド実行例

pgrep -u study bash

(ユーザーstudyが実行しているbashを表示)


画面3 画面3 ユーザーを指定してpgrepを実行したところ


端末を指定する

 「pgrep -t 端末」で、実行している端末を指定できます。「-t tty1」や「-t pts/1」のように指定し、複数指定したい場合は「,」で区切ります。

 画面4では「pgrep -t pts/1,pts/2 -a ".*"」と指定することにより、仮想端末1と2で実行している全てのプロセスを表示しています。

コマンド実行例

pgrep -t tty1 ".*"

(端末1で実行しているプロセスを表示)

pgrep -t pts/1 ".*"

(仮想端末1で実行しているプロセスを表示)


画面4 画面4 端末を指定してpgrepを実行したところ


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。