pkill – プロセス名を指定して終了シグナルを送るコマンド

制御(停止・再開・終了)
スポンサーリンク

pkill は Linux のプロセス管理コマンドの1つで、killkillall と同じく「プロセスを終了」させる目的で使います。

特徴としては、pkill は 「プロセス名でまとめてシグナルを送る」 のが特徴で、個別のPIDを調べる必要がありません。

この記事では pkill の基本構文から、killkillall との違い、そしてトラブル時の確認方法まで整理します。

主にコマンドライン操作を前提としているので、「Bash」の記事も参考にしてください。

  1. pkillとは?
    1. 代表的な使い方
  2. kill系コマンドの関係図と比較表 – kill / killall / pkill / pgrep の比較表
  3. 構文(Syntax)
  4. 主なオプション・シグナル一覧
  5. 実行例(sudo pkill bluetoothdなど)
    1. 1. Bluetoothサービスの再起動
    2. 2. GUIアプリをまとめて終了する
    3. 3. 特定ユーザーが起動しているプロセスを終了
    4. 4. プロセス名ではなくコマンドラインでマッチ(-f)
    5. 5. ログイン端末ごとのセッション終了
    6. 6. プロセスの一括強制終了(最終手段)
    7. 補足:安全に停止したいときの流れ
  6. pkillが効かないときの対処法
    1. 1. 対象プロセスが存在しない
    2. 2. 権限不足によるシグナル拒否
    3. 3. systemd 管理下のプロセス
    4. 4. シグナルの種類が適切でない
    5. 5. 条件指定の誤り(-f, -x, -u, -t)
    6. 6. プロセスがゾンビ化している
    7. 7. 別のユーザー・セッションで起動している
    8. トラブル対応チェックリスト
  7. kill・killall・pgrepとの違い
    1. kill:PID(プロセスID)を指定して終了
    2. killall:同名のプロセスをまとめて終了
    3. pkill(本記事の取り扱いコマンド):条件付きでプロセスにシグナルを送る
    4. pgrep:対象プロセスを検索(終了しない)
    5. コマンドの関係と使い分け早見表
    6. 使い分けの実例
  8. よくある質問(FAQ)
    1. Q. pkillコマンドとは何ですか?
    2. Q. pkillとkillの違いは?
    3. Q. pkillの-fオプションとは?
    4. Q. killallとの違いは?
    5. Q. pkillが効かないときは?
    6. Q. 安全にプロセスを止めるには?
    7. Q. サービス再起動にはpkillを使っても大丈夫?
    8. Q. pgrepとはどう違うの?
  9. 関連コマンドと参考リンク
    1. 関連コマンド
    2. 外部参考リンク
  10. 関連記事

pkillとは?

pkillプロセス名や条件(ユーザー・端末・親子関係など)を指定して、まとめてシグナルを送る コマンドです。個々の PID を調べて kill する手間を省けるため、「同名のプロセスを一括で終了/再読み込みしたい」 場面でよく使われます。デフォルトで送られるシグナルは SIGTERM(15)です。必要に応じて -9SIGKILL)など任意のシグナルに変更できます。

  • 対象の指定方法:パターン(正規表現)でマッチした実行ファイル名に対してシグナル送信
    • -f を付けると コマンドライン全体(引数まで)でマッチ
    • -x完全一致(部分一致ではない)
  • 主な用途
    • 同名プロセスの一括停止(例:pkill nginx
    • 特定ユーザー配下のプロセス停止(例:pkill -u www-data apache2
    • 端末/セッション単位の停止(例:pkill -t pts/0
  • 権限:自分が所有するプロセスのみ停止可能。システムプロセスや他ユーザーのプロセスには sudo が必要
  • 安全性の考え方:まず SIGTERM → それでも止まらなければ原因を確認(権限・マッチ条件・サービス管理配下か) → 最終手段として -9

代表的な使い方

# 基本:実行ファイル名に部分一致するプロセスへ SIGTERM
pkill nginx

# フルコマンドラインでマッチ(-f)
pkill -f "python3 my_worker.py"

# 完全一致でマッチ(-x)
pkill -x sshd

# 特定ユーザーのプロセスのみ対象(-u)
pkill -u www-data php-fpm

# 強制終了(SIGKILL = -9)※最終手段
sudo pkill -9 docker

補足:systemd 管理下のサービスは、プロセス直叩きの pkill よりも
systemctl stop <service> を優先すると、依存関係や後処理を踏まえた安全な停止になります。

kill系コマンドの関係図と比較表 – kill / killall / pkill / pgrep の比較表

本記事で取り扱う pkill はプロセスの終了を行いますが、似ているコマンドも存在するので、その比較を表で表します。用途に合わせて使い分けてください。

コマンド対象の指定方法主な用途
killPID特定の1プロセス終了kill 1234
killallプロセス名同名プロセスをまとめて終了killall firefox
pkillプロセス名・ユーザー・端末条件付きで終了pkill -u www-data apache2
pgrepプロセス名PIDの検索pgrep nginx

構文(Syntax)

pkill [オプション] [シグナル] パターン

主なオプション・シグナル一覧

オプション / シグナル説明使用例
(なし) = -15デフォルトは SIGTERM(通常終了要求)pkill nginx
-9 / -KILL強制終了(SIGKILL)pkill -9 firefox
-HUP再読み込み(デーモン設定リロードでよく利用)pkill -HUP syslogd
-u USER特定ユーザーのプロセスに限定pkill -u alice python
-P PID親プロセスID(PPID)を指定pkill -P 1234
-x完全一致のみ対象にするpkill -x sshd
-fコマンドライン全体を検索対象にするpkill -f "python script.py"
-n最新(最も新しい)プロセスにだけ作用pkill -n firefox
-o最古のプロセスにだけ作用pkill -o firefox
-lマッチしたプロセス名を表示pkill -l nginx
-signal任意のシグナルを送るpkill -SIGSTOP myapp

実行例(sudo pkill bluetoothdなど)

ここでは、pkill コマンドを実際に使用する例をいくつか紹介します。
単なるプロセス終了だけでなく、再起動や特定ユーザーの制御、ログイン端末ごとの管理など、現場でよく使われるパターンを中心にまとめます。

1. Bluetoothサービスの再起動

Bluetoothが動作不安定になったとき、プロセスを再起動して復旧する場面でよく使われます。

sudo pkill bluetoothd
sudo systemctl start bluetooth
  • bluetoothd は Bluetooth デーモンプロセス。
  • sudo が必要(root権限で動作しているため)。
  • systemctl start bluetooth で安全に再起動します。

2. GUIアプリをまとめて終了する

複数のアプリを一度に閉じたい場合にも便利です。

pkill firefox
pkill code
  • すべての Firefox または VSCode プロセスを終了します。
  • タスクマネージャーを開かずに即終了できるのが利点です。

3. 特定ユーザーが起動しているプロセスを終了

サーバー運用では、特定ユーザー配下のジョブを安全に止めたいケースがあります。

sudo pkill -u www-data php-fpm
  • -u はユーザー指定。
  • Webサーバー配下の PHP-FPM プロセスのみ対象にできます。

4. プロセス名ではなくコマンドラインでマッチ(-f)

引数やフルパスにマッチさせたい場合は -f を使用します。

pkill -f "python3 my_worker.py"
  • -f がないと「my_worker.py」が含まれるプロセスを見逃す可能性があります。
  • バッチや常駐スクリプトの制御で重宝します。

5. ログイン端末ごとのセッション終了

特定のTTY(端末)に紐づくセッションを切断する場合。

pkill -t pts/0
  • -t で端末指定(whotty コマンドで確認可能)。
  • リモートログイン中のユーザー切断などに使用されます。

6. プロセスの一括強制終了(最終手段)

通常は SIGTERM で安全に停止できますが、応答しないプロセスには -9 を使います。

sudo pkill -9 docker
  • -9 = SIGKILL(強制終了)。
  • 終了処理を待たずにプロセスを即時停止するため、データ破損のリスクあり
    本当に応答しないときのみ使用します。

補足:安全に停止したいときの流れ

  1. pkill <name> … 通常終了を試す
  2. pgrep <name> … まだ残っていればPID確認
  3. sudo pkill -9 <name> … 最後の手段
  4. systemctl stop <service> … サービス管理下ならこちらを優先

pkill は「一括で止める」強力なコマンドです。
日常的には安全なシグナル(SIGTERM)で止め、強制終了は慎重に行いましょう。

pkillが効かないときの対処法

pkill を実行してもプロセスが終了しない場合、いくつかの原因が考えられます。
このセクションでは、原因の特定と安全な対処手順を順を追って解説します。

1. 対象プロセスが存在しない

まずは、本当に対象となるプロセスが動作しているかを確認します。

pgrep nginx
  • 出力がなければ、pkill が効かないのではなく「そもそも該当プロセスが存在しない」状態です。
  • pkill は部分一致で検索するため、プロセス名のスペル違いにも注意しましょう。
    (例:bluetoothbluetoothd は別物)

2. 権限不足によるシグナル拒否

他ユーザーまたは root 権限で動作するプロセスには、通常ユーザーからの pkill は効きません。
この場合は sudo を付けて実行します。

sudo pkill nginx
  • root 所有プロセス → sudo 必須
  • 自分のユーザーのみ対象にしたい場合 → pkill -u $(whoami) <name>

3. systemd 管理下のプロセス

systemctl によって起動されているサービスは、直接 pkill しても自動で再起動される場合があります。
(例:apache2, bluetoothd, cron, docker など)

sudo systemctl stop nginx
sudo systemctl disable nginx  # 自動再起動を止める場合
  • systemd が監視しているため、pkill では停止できないように見えることがあります。
  • サービス管理下では、systemctl stop を使うのが正解です。

4. シグナルの種類が適切でない

pkill のデフォルトシグナルは SIGTERM(通常終了要求)です。
しかし、プロセスが応答しない・ハングしている場合は SIGKILL に変更します。

sudo pkill -9 nginx
  • -9 = SIGKILL(強制終了)
  • ただし、データ破損のリスクがあるため、最終手段としてのみ使用します。

5. 条件指定の誤り(-f, -x, -u, -t)

pkill は「マッチ条件」によって動作結果が変わります。

状況修正方法
フルパス指定にしか一致しない-f を追加(例:pkill -f python3 myscript.py
部分一致が多すぎる-x を追加して完全一致
特定ユーザーのプロセスだけ止めたい-u user を指定
リモートセッションだけ止めたい-t pts/0 など端末指定

6. プロセスがゾンビ化している

ps aux | grep <name> で状態(STAT列)が Z の場合、ゾンビプロセスです。
ゾンビはすでに終了しており、pkill では消えません。

ps aux | grep Z
  • 親プロセス(PPID)を確認し、その親を終了させる必要があります。
  • 親が initsystemd の場合は、時間経過で自動的に回収されます。

7. 別のユーザー・セッションで起動している

GUI環境やcronジョブなど、別のセッションで起動している場合、
自分の端末(TTY)からは見えないことがあります。

ps -ef | grep <name>
  • TTY 列が ? の場合、バックグラウンドプロセスです。
  • sudo で全プロセスを検索・停止するのが確実です。

トラブル対応チェックリスト

チェック項目コマンド例
プロセスが存在するか確認pgrep <name>
権限不足でないかsudo pkill <name>
systemd管理下でないかsystemctl status <name>
シグナルの変更が必要かpkill -9 <name>
マッチ条件に問題ないかpkill -f / -x / -u
ゾンビ化していないか`ps aux

補足:
pkill は強力なコマンドですが、無条件で大量のプロセスを終了させるとシステムが不安定になることもあります。
まずは pgrep で対象を確認し、sudo とシグナル指定を慎重に扱うことが重要です。

kill・killall・pgrepとの違い

pkill は「プロセス名などを指定してシグナルを送る」コマンドですが、
同じ目的を持つ killkillallpgrep と混同されがちです。
ここでは、それぞれの特徴と使い分け方を整理します。

kill:PID(プロセスID)を指定して終了

kill は、最も基本的なプロセス終了コマンドです。
ただし、対象を指定するにはあらかじめ PID(プロセスID)を調べておく必要があります。

ps aux | grep nginx
kill 1234
  • メリット:確実に特定のプロセスを狙える
  • デメリット:複数プロセスをまとめて終了させるのは手間
  • 使用例:一時的なスクリプトや特定のPIDを止めたい場合に最適

killPID指定が必要。プロセス名では動作しません。

killall:同名のプロセスをまとめて終了

killall は、同じ実行ファイル名のプロセスをすべて終了させます。
同名プロセスが複数起動しているときに便利です。

killall firefox
  • メリット:複数の同名プロセスを一括終了できる
  • デメリット:同名の別ユーザー・別セッションのプロセスまで巻き込むことがある
  • 補足:macOS では動作仕様が Linux と異なる(killall はプロセス名完全一致)

killall は名前一致でシグナルを送るため、類似名のプロセスがあると誤終了リスクがあります。

pkill(本記事の取り扱いコマンド):条件付きでプロセスにシグナルを送る

pkillkillall の拡張版とも言えます。
プロセス名だけでなく、ユーザー・端末・セッションなど細かい条件で指定できます。

pkill -u www-data apache2
pkill -t pts/0 bash
  • メリット:柔軟な条件指定(ユーザー・端末・フルパス一致など)
  • デメリット:条件が複雑だと意図せぬプロセスを止める可能性
  • 用途:サーバー運用やバッチ処理での自動終了スクリプトなど

pkill は「パターンマッチングで対象を決める」点が最大の特徴です。
killall よりも細かい条件を付けられます。

pgrep:対象プロセスを検索(終了しない)

pgrep は、pkill の「検索だけバージョン」です。
終了せず、該当する PID を一覧表示します。

pgrep nginx
pgrep -u www-data php-fpm
  • メリット:対象確認に最適(安全に使える)
  • デメリット:終了処理は自分で kill を実行する必要がある
  • 用途:スクリプト内で「PIDを取得してからkill」する場合など

コマンドの関係と使い分け早見表

コマンド指定対象動作内容主な用途
killPID指定したプロセスを終了特定プロセスの安全停止
killallプロセス名同名プロセスを全終了GUIアプリなどの一括終了
pkill名称・ユーザー・端末など条件条件一致するプロセスを終了サーバー・スクリプト運用向け
pgrep名称・条件条件一致プロセスのPIDを取得対象確認・スクリプト連携

使い分けの実例

# PID指定で確実に止める
kill 1234

# 全Firefoxプロセスを終了
killall firefox

# www-dataユーザーのApacheのみ終了
pkill -u www-data apache2

# 終了対象を確認だけする
pgrep apache2
  • 安全に確認 → pgrep
  • 個別停止 → kill
  • 一括停止 → killall
  • 条件付き停止 → pkill

日常的なサーバー管理では、pgrep で確認 → pkill で停止 という流れが最も効率的です。

よくある質問(FAQ)

pkill に関するよくある疑問をまとめました。
実際のトラブルや検索クエリ(「pkill kill 違い」「pkill -f 意味」など)をもとに構成しています。

Q. pkillコマンドとは何ですか?

pkillプロセス名や条件を指定してシグナルを送る コマンドです。
主に「プロセスを終了させる」ために使われますが、PIDを調べる必要がないため、kill よりも手軽に操作できます。

pkill nginx       # nginx関連プロセスを終了
pkill -u userX    # 特定ユーザーのプロセスを終了

Q. pkillとkillの違いは?

比較項目pkillkill
対象指定プロセス名・条件PID(プロセスID)
対象数条件に一致する複数単一または手動指定した複数
利便性一括終了が容易確実だが手間が多い
典型例pkill nginxkill 1234

まとめると:
pkill は「プロセス名でまとめて操作」するのに便利、
kill は「ピンポイントに停止」したいときに使います。

Q. pkillの-fオプションとは?

-f「フルコマンドラインで一致」 させるオプションです。
通常は実行ファイル名のみが対象ですが、-f を付けると引数を含めた検索ができます。

pkill -f "python3 my_worker.py"
  • 例:実行中コマンドが /usr/bin/python3 /opt/scripts/my_worker.py の場合
    pkill my_worker.py ではヒットしないが、pkill -f なら一致する。
  • スクリプト名やパスで判定したいときに有効です。

Q. killallとの違いは?

killall は「同名のプロセスをすべて終了」するコマンドです。
pkill と似ていますが、マッチ条件の柔軟さに違いがあります。

項目killallpkill
対象指定実行ファイル名名前・ユーザー・端末・コマンドラインなど
マッチ方式完全一致が基本正規表現による部分一致が可能
高度な絞り込み不可可能(例:-u, -t, -fなど)

Linuxでは pkill がより汎用的。
macOSでは killall が主流で、挙動がLinux版と異なる点に注意。

Q. pkillが効かないときは?

以下のいずれかが原因のことが多いです。

  1. 権限不足 → sudo pkill <name> を試す
  2. systemd管理下のサービス → systemctl stop <service> を使用
  3. マッチ条件が誤っている → pgrep で確認
  4. プロセスがゾンビ化 → 親プロセスの終了が必要

詳しくは → pkillが効かないときの対処法

Q. 安全にプロセスを止めるには?

基本は以下の順で行います。

  1. 確認pgrep <name> で対象を確認
  2. 通常終了pkill <name>
  3. まだ残っていればsudo pkill <name>
  4. 最後の手段sudo pkill -9 <name>

-9 は強制終了(SIGKILL)で安全性が低いため、
ログや設定ファイルを破損するリスクがある点に注意しましょう。

Q. サービス再起動にはpkillを使っても大丈夫?

systemd 管理下のサービス(例:nginx, apache2, bluetoothd など)では、
pkill よりも systemctl restart <service> を使うのが推奨です。

sudo systemctl restart nginx

理由:pkill はプロセスを強制終了させるだけで、
依存関係やログ管理を考慮しないため、システムトラブルの原因になることがあります。

Q. pgrepとはどう違うの?

pgrep は「検索専用」で、シグナルは送らないコマンドです。
pkill の “killしない版” と覚えるとわかりやすいです。

pgrep nginx    # nginxのPIDを一覧表示
pkill nginx    # nginxを終了

補足:覚え方

  • pgrep → “process grep” = 探す
  • pkill → “process kill” = 終わらせる

関連コマンドと参考リンク

pkill は、プロセス管理の中核を担うコマンド群のひとつです。
ここでは、実務でよく一緒に使われる関連コマンドと、外部の参考資料をまとめます。

関連コマンド

コマンド役割主な用途詳細解説
killプロセスID(PID)を指定して終了特定のプロセスを安全に停止kill 1234
killall同名のプロセスをまとめて終了GUIアプリや複数起動プロセスの一括停止killall firefox
pgrepプロセスを検索(終了しない)対象確認やスクリプト内処理pgrep nginx
ps現在動作中のプロセスを一覧表示PID確認、状態監視ps aux
systemctlsystemd サービスの制御サービス単位の開始・停止systemctl stop nginx
top実行中プロセスの動的モニタ負荷やCPU使用率の確認top または htop

ポイント
pkill だけで完結することは少なく、
実務では「psで確認 → pgrepで抽出 → pkillで停止 → 必要ならsystemctlで再起動」
という一連の流れで使われます。

外部参考リンク

サイト内容備考
ITmedia:pkillコマンド解説pkill の基本構文とkillallとの違いを整理定番リファレンス
Qiita:pkillとpgrepの使い方pgrep と組み合わせた実践例実行サンプルが豊富
Zenn:便利なLinuxコマンド pkillプロセス名で一括killする活用法実務者向けまとめ
manページ(英語)pkill(1) の公式ドキュメント詳細なオプション仕様
Linux kill系コマンドまとめ(LabEx)killkillallpkill の比較初心者向け

関連記事(bash道内)

スポンサーリンク
Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント