pkill
は Linux のプロセス管理コマンドの1つで、kill
や killall
と同じく「プロセスを終了」させる目的で使います。
特徴としては、pkill
は 「プロセス名でまとめてシグナルを送る」 のが特徴で、個別のPIDを調べる必要がありません。
この記事では pkill
の基本構文から、kill
・killall
との違い、そしてトラブル時の確認方法まで整理します。
主にコマンドライン操作を前提としているので、「Bash」の記事も参考にしてください。
pkillとは?
pkill
は プロセス名や条件(ユーザー・端末・親子関係など)を指定して、まとめてシグナルを送る コマンドです。個々の PID を調べて kill
する手間を省けるため、「同名のプロセスを一括で終了/再読み込みしたい」 場面でよく使われます。デフォルトで送られるシグナルは SIGTERM
(15)です。必要に応じて -9
(SIGKILL
)など任意のシグナルに変更できます。
- 対象の指定方法:パターン(正規表現)でマッチした実行ファイル名に対してシグナル送信
-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
はプロセスの終了を行いますが、似ているコマンドも存在するので、その比較を表で表します。用途に合わせて使い分けてください。
コマンド | 対象の指定方法 | 主な用途 | 例 |
---|---|---|---|
kill | PID | 特定の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
で端末指定(who
やtty
コマンドで確認可能)。- リモートログイン中のユーザー切断などに使用されます。
6. プロセスの一括強制終了(最終手段)
通常は SIGTERM
で安全に停止できますが、応答しないプロセスには -9
を使います。
sudo pkill -9 docker
-9
=SIGKILL
(強制終了)。- 終了処理を待たずにプロセスを即時停止するため、データ破損のリスクあり。
本当に応答しないときのみ使用します。
補足:安全に停止したいときの流れ
pkill <name>
… 通常終了を試すpgrep <name>
… まだ残っていればPID確認sudo pkill -9 <name>
… 最後の手段systemctl stop <service>
… サービス管理下ならこちらを優先
pkill
は「一括で止める」強力なコマンドです。
日常的には安全なシグナル(SIGTERM
)で止め、強制終了は慎重に行いましょう。
pkillが効かないときの対処法
pkill
を実行してもプロセスが終了しない場合、いくつかの原因が考えられます。
このセクションでは、原因の特定と安全な対処手順を順を追って解説します。
1. 対象プロセスが存在しない
まずは、本当に対象となるプロセスが動作しているかを確認します。
pgrep nginx
- 出力がなければ、
pkill
が効かないのではなく「そもそも該当プロセスが存在しない」状態です。 pkill
は部分一致で検索するため、プロセス名のスペル違いにも注意しましょう。
(例:bluetooth
とbluetoothd
は別物)
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)を確認し、その親を終了させる必要があります。
- 親が
init
やsystemd
の場合は、時間経過で自動的に回収されます。
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
は「プロセス名などを指定してシグナルを送る」コマンドですが、
同じ目的を持つ kill
・killall
・pgrep
と混同されがちです。
ここでは、それぞれの特徴と使い分け方を整理します。
kill:PID(プロセスID)を指定して終了
kill
は、最も基本的なプロセス終了コマンドです。
ただし、対象を指定するにはあらかじめ PID(プロセスID)を調べておく必要があります。
ps aux | grep nginx
kill 1234
- メリット:確実に特定のプロセスを狙える
- デメリット:複数プロセスをまとめて終了させるのは手間
- 使用例:一時的なスクリプトや特定のPIDを止めたい場合に最適
kill
は PID指定が必要。プロセス名では動作しません。
killall:同名のプロセスをまとめて終了
killall
は、同じ実行ファイル名のプロセスをすべて終了させます。
同名プロセスが複数起動しているときに便利です。
killall firefox
- メリット:複数の同名プロセスを一括終了できる
- デメリット:同名の別ユーザー・別セッションのプロセスまで巻き込むことがある
- 補足:macOS では動作仕様が Linux と異なる(
killall
はプロセス名完全一致)
killall
は名前一致でシグナルを送るため、類似名のプロセスがあると誤終了リスクがあります。
pkill(本記事の取り扱いコマンド):条件付きでプロセスにシグナルを送る
pkill
は killall
の拡張版とも言えます。
プロセス名だけでなく、ユーザー・端末・セッションなど細かい条件で指定できます。
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」する場合など
コマンドの関係と使い分け早見表
コマンド | 指定対象 | 動作内容 | 主な用途 |
---|---|---|---|
kill | PID | 指定したプロセスを終了 | 特定プロセスの安全停止 |
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の違いは?
比較項目 | pkill | kill |
---|---|---|
対象指定 | プロセス名・条件 | PID(プロセスID) |
対象数 | 条件に一致する複数 | 単一または手動指定した複数 |
利便性 | 一括終了が容易 | 確実だが手間が多い |
典型例 | pkill nginx | kill 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
と似ていますが、マッチ条件の柔軟さに違いがあります。
項目 | killall | pkill |
---|---|---|
対象指定 | 実行ファイル名 | 名前・ユーザー・端末・コマンドラインなど |
マッチ方式 | 完全一致が基本 | 正規表現による部分一致が可能 |
高度な絞り込み | 不可 | 可能(例:-u , -t , -f など) |
Linuxでは
pkill
がより汎用的。
macOSではkillall
が主流で、挙動がLinux版と異なる点に注意。
Q. pkillが効かないときは?
以下のいずれかが原因のことが多いです。
- 権限不足 →
sudo pkill <name>
を試す - systemd管理下のサービス →
systemctl stop <service>
を使用 - マッチ条件が誤っている →
pgrep
で確認 - プロセスがゾンビ化 → 親プロセスの終了が必要
詳しくは → pkillが効かないときの対処法
Q. 安全にプロセスを止めるには?
基本は以下の順で行います。
- 確認:
pgrep <name>
で対象を確認 - 通常終了:
pkill <name>
- まだ残っていれば:
sudo pkill <name>
- 最後の手段:
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 |
systemctl | systemd サービスの制御 | サービス単位の開始・停止 | 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) | kill ・killall ・pkill の比較 | 初心者向け |
関連記事(bash道内)
コメント