【 pgrep 】コマンド――プロセス名や属性からプロセスIDを探す:Linux基本コマンドTips(131)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセス名やユーザー名などの属性からプロセスIDを探す「pgrep」コマンドです。
本連載は、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」相当)
コマンド実行例2
pgrep -a gdm
(プロセス名に「gdm」を含むプロセス(「-a」でコマンドラインを表示))
pgrep -a "^gdm"
(プロセス名が「gdm」と一致するプロセスを表示)
pgrep -ax gdm
(プロセス名が「gdm」と一致するプロセスを表示)
pgrep -af gdm
(コマンドラインを含めて「gdm」を含むプロセスを表示)
ユーザー名を指定する
「pgrep -u ユーザー」で、プロセスを所有するユーザーを限定できます(画面3)。指定にはユーザー名やユーザーIDを使用できます。複数指定したい場合は「-u ユーザー1,ユーザー2,ユーザー3」のように「,」で区切ります。
コマンド実行例
pgrep -u study bash
(ユーザーstudyが実行しているbashを表示)
端末を指定する
「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で実行しているプロセスを表示)
筆者紹介
西村 めぐみ(にしむら めぐみ)
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.