【Linux】pgrep・pkillコマンドの使い方|プロセスの検索と終了

【Linux】pgrep・pkillコマンドの使い方|プロセスの検索と終了

PR Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:2,929

Linuxのpgrep・pkillコマンドの使い方を解説します。プロセス名でPIDを検索するpgrepと、プロセス名で直接終了できるpkillの基本構文から、-f・-u・-lなど主要オプション、ps aux | grep との違いまで具体例付きで紹介します。

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

初心者向け

わかばちゃんと学ぶ サーバー監視

難易度
実用性
読みやすさ

マンガと図解が中心で圧倒的に読みやすい。負荷調査の手法がスッと理解できるようになります。

新しいLinuxの教科書 第2版

難易度
実用性
読みやすさ

一生モノの基礎知識が身につく定番書です。

ゼロからわかる Linuxコマンド200本ノック―基礎知識と頻出コマンドを無理なく記憶に焼きつけよう!

難易度
実用性
習得度

アウトプット重視で記憶に定着しやすい。反復練習でLinux操作が自由自在になります。

エンジニア1年生のための世界一わかりやすいLinuxコマンドの教科書

難易度
実用性
読みやすさ

LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネルでプロセスを検索・終了する際、ps aux | grep でPIDを調べてから kill で終了する、という手順が一般的です。しかし、pgreppkill を使えば、この操作をもっとシンプルに行えます。

本記事では、プロセス名でPIDを検索する pgrep と、プロセス名で直接終了できる pkill の使い方を、具体的なコマンド例とともに解説します。

pgrepコマンドとは

pgrepは、プロセス名のパターンに一致するプロセスのPID(プロセスID)を表示するコマンドです。psgrepを組み合わせる従来の方法と比べて、コマンドが短く、grep自身のプロセスが混入しないメリットがあります。

pgrepの基本構文

構文
pgrep [オプション] パターン

pgrepの基本的な使い方

プロセス名を指定してPIDを取得できます。

実行コマンド
pgrep nginx
実行結果
1234
5678

nginxNginx [エンジンエックス]高性能なWebサーバー・リバースプロキシという名前のプロセスのPIDが一覧で出力されます。

pkillコマンドとは

pkillは、プロセス名のパターンに一致するプロセスにシグナルを送信するコマンドです。デフォルトではSIGTERM(終了シグナル)が送られ、プロセスを終了させます。

PIDを調べてからkillを実行する手順が不要になるため、プロセスの終了操作を1コマンドで完結できます。

pkillの基本構文

構文
pkill [オプション] パターン

pkillの基本的な使い方

プロセス名を指定して終了できます。

実行コマンド
pkill nginx

上記コマンドで、nginxという名前のプロセスすべてにSIGTERMが送られます。

pgrepの主要オプションと使用例

-l:PIDとプロセス名を表示する

-lオプションを付けると、PIDに加えてプロセス名も表示されます。

実行コマンド
pgrep -l nginx
実行結果
1234 nginx
5678 nginx

-a:PIDとコマンドライン全体を表示する

-aオプションを使うと、実行時のコマンドライン(引数含む)全体が表示されます。

実行コマンド
pgrep -a nginx
実行結果
1234 nginx: master process /usr/sbin/nginx
5678 nginx: worker process

-f:コマンドライン全体を検索対象にする

デフォルトではプロセス名のみが検索対象ですが、-fオプションを使うと コマンドライン全体(引数を含む) が検索対象になります。

実行コマンド
pgrep -f "python script.py"
実行結果
2345

pythonというプロセス名だけでなく、引数のscript.pyを含めてマッチングするため、特定のスクリプトを実行しているプロセスをピンポイントで検索できます。

-u:ユーザーを指定して検索する

-uオプションで、特定のユーザーが実行しているプロセスに絞り込めます。

実行コマンド
pgrep -u www-data
実行結果
3456
3457
3458

-c:マッチしたプロセスの数を表示する

-cオプションは、マッチしたプロセスのPIDではなく件数を返します。

実行コマンド
pgrep -c nginx
実行結果
5

プロセスの起動数を確認したい場合に便利です。

-x:プロセス名の完全一致で検索する

-xオプションを使うと、部分一致ではなく完全一致で検索できます。

実行コマンド
pgrep -x ssh

sshに完全一致するプロセスのみが検索され、sshdは含まれません。

注意:プロセス名は15文字までしかマッチしない pgreppkillがマッチングに使用するプロセス名は、/proc/PID/statに記録された最大15文字に制限されています。そのため、node-application-serverのような16文字以上のプロセス名は途中で切れてしまい、意図した通りにマッチしない場合があります。長いプロセス名を扱う場合は、-fオプションを使ってコマンドライン全体(/proc/PID/cmdline)を検索対象にしてください。

15文字を超えるプロセス名の場合
# プロセス名が切れてマッチしない可能性がある
pgrep node-application-server
# -f でコマンドライン全体を対象にすれば確実
pgrep -f node-application-server

pkillの主要オプションと使用例

pkillpgrepと同じオプション(-f-u-xなど)に加え、シグナル指定のオプションが使えます。

シグナルを指定して送信する

デフォルトのSIGTERMではプロセスが終了しない場合、-SIGKILL-9)で強制終了できます。

実行コマンド(SIGTERM / 通常終了)
pkill nginx
実行コマンド(SIGKILL / 強制終了)
pkill -9 nginx

注意: -9(SIGKILL)は最終手段です。プロセスが後処理を行う機会なく即座に終了するため、まずはSIGTERM(デフォルト)で正常終了を試みてください。

-f:コマンドライン全体を対象に終了する

実行コマンド
pkill -f "python script.py"

-fオプションはpgrepと同様に、引数を含めたコマンドライン全体でマッチングします。

-u:特定ユーザーのプロセスを終了する

実行コマンド
pkill -u testuser

指定ユーザーが実行しているすべてのプロセスを終了させます。

注意: -uのみで実行すると、そのユーザーの全プロセスが対象になります。特定のプロセスのみ終了したい場合は、プロセス名やパターンと組み合わせて使用してください。

-u とプロセス名を組み合わせる

実行コマンド
pkill -u www-data nginx

www-dataユーザーが実行しているnginxプロセスのみを終了します。

pgrepとpkillのオプションまとめ

オプション説明
-lPIDとプロセス名を表示する(pgrepのみ)
-aPIDとコマンドライン全体を表示する(pgrepのみ)
-fコマンドライン全体を検索対象にする
-u ユーザー名指定ユーザーのプロセスに絞り込む
-xプロセス名の完全一致で検索する
-cマッチしたプロセス数を表示する(pgrepはPIDの代わりに件数を表示、pkillはシグナルを送ったプロセス数を表示)
-9-SIGKILL強制終了シグナルを送信する(pkillのみ)
-15-SIGTERM終了シグナルを送信する(pkillのデフォルト)

pgrep・pkillの安全な使い方

pkillは強力なコマンドのため、意図しないプロセスを終了してしまうリスクがあります。以下の手順で安全に使用してください。

ステップ1:pgrepで対象を確認する

pkillを実行する前に、必ず同じ条件でpgrepを実行し、対象プロセスが正しいか確認します。

対象プロセスの確認
pgrep -la nginx
実行結果
1234 nginx: master process /usr/sbin/nginx
5678 nginx: worker process

ステップ2:問題なければpkillを実行する

確認した結果が意図した通りであれば、pkillを実行します。

プロセスの終了
pkill nginx

ステップ3:プロセスの終了を確認する

プロセスが正しく終了したか、再度pgrepで確認します。

終了の確認
pgrep -l nginx

出力がなければ、すべてのnginxプロセスが正常に終了しています。

ps aux | grep との違い

従来のps aux | grepを使ったプロセス検索と比較すると、pgreppkillには以下のメリットがあります。

従来の方法(ps aux | grep)

従来の方法
ps aux | grep nginx | grep -v grep

grepコマンド自身がpsの結果に含まれてしまうため、grep -v grepで除外する必要があります。さらに、PIDを目視で確認してからkillを実行する必要があり、手順が多くなります。

PIDを確認してkillを実行
ps aux | grep nginx | grep -v grep
# 出力からPIDを確認
kill 1234

pgrep・pkillを使った方法

pgrep・pkillを使った方法
# PIDの検索
pgrep -l nginx
# プロセスの終了
pkill nginx

grep自身の混入を気にする必要がなく、PIDの確認と終了がそれぞれ1コマンドで完結します。

比較項目ps aux | greppgrep / pkill
grep自身の混入あり(grep -v grepが必要)なし
PID取得のしやすさ目視で確認が必要PIDのみが出力される
プロセス終了PID確認後にkillを別途実行pkillで1コマンド完結
コマンドの簡潔さ長くなりがち短く書ける

まとめ

  • pgrep はプロセス名でPIDを検索するコマンド
  • pkill はプロセス名でプロセスを直接終了できるコマンド
  • -fオプションでコマンドライン全体を検索対象にできる
  • -uオプションで特定ユーザーのプロセスに絞り込める
  • pkillの実行前に、必ずpgrepで対象プロセスを確認する
  • ps aux | grepより簡潔で、grep自身の混入もない

関連コマンド プロセスの状態を詳しく確認したい場合は、psコマンドの出力の見方について以下の記事を参考にしてください。

【Linux】psコマンドの見方・読み方をわかりやすく解説
ITナレッジライフ

【Linux】psコマンドの見方・読み方をわかりやすく解説

Linuxのpsコマンドの実行結果の見方・読み方を解説します。ps auxやps -efで表示される各項目(PID、STAT、%CPUなど)の意味から、プロセス状態(STAT)の詳細まで初心者向けにわかりやすくまとめました。


以上で本記事の解説を終わります。
よいITライフを!
ITナレッジライフ 運営者
この記事を書いた人

Z (ITナレッジライフ)

現役のITエンジニア。Linux、プログラミング、IT用語など、日々の業務で得た「痒いところに手が届く」技術情報を発信しています。

プロフィールと編集ポリシーを見る

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

人気記事


記事を評価

Thanks!
目次
Scroll to Top