Linux / コマンド / pkill - 名前でプロセスにシグナルを送る
pkillは名前や条件に一致するプロセスにシグナルを送ります。シグナルはプロセスへ通知する仕組みで、標準では終了を要求するSIGTERMを送ります。ただし、名前が広く一致すると意図しない複数のプロセスにも適用される場合があります。
pgrepと同様の条件を使用しますが、結果を表示する代わりに対象にシグナルを送ります。したがって、まず pgrepのPID(プロセス識別番号)・コマンドライン表示 を同じ条件で実行し、対象ユーザーとコマンドラインを確認することが安全です。
基本的な文法
pkill [オプション] パターン
インストールされている実装とオプションは、配布版によって異なる場合があります。man pkillで現在のシステムの説明を確認してください。
使用例
対象をまず確認
myworker は既に起動している自分の実習用アプリ名の例です。実在する対象のプロセス名へ置き換え、選ばれたすべての行が意図したものか確認します。以下の使い方は独立した例であり、同じ対象へ続けて実行する手順ではありません。
pgrep -a -x myworker
基本終了要求
確認した名前に一致するプロセスにSIGTERMを送ります。
pkill -x myworker
ユーザーで範囲制限
alice を実在する対象ユーザーに置き換え、実効ユーザーで絞ります。先に pgrep -a -u alice -x myworker として、送信時と同じ条件で一覧を確認してください。
pkill -u alice -x myworker
終了コマンドの結果を確認する
以下は、自分の実習用プログラムが実際に demo-worker というプロセス名で動いている場合の例です。pkill は名前パターンに一致するプロセスにシグナルを送ります。成功しても通常はPIDのリストを出力しないため、まず同じ条件でpgrepを実行して対象を確認します。
pgrep -a -x demo-worker
pkill -TERM -x demo-worker
pgrep -a -x demo-worker
最初の確認ではテスト用プロセスが表示されることがあり、信号送信自体は出力がなく、最後の確認は終了していれば空の出力になります。信号を送ったからといって即座に終了が保証されるわけではないので、少し後に再確認してください。
-x は正規表現を名前全体に一致させますが、記号を通常の文字扱いにする指定ではありません。-fでコマンドライン全体を検索する場合、パターンがより広く一致する可能性があるので特に注意してください。例は自分で作ったテストプロセスにのみ適用し、実際のサービスでは運用手順に従ってください。
主なオプションと形式
| オプション・形式 | 説明 |
|---|---|
-x |
名前全体が一致するプロセスを選択します。 |
-u ユーザー |
実効ユーザーIDで対象を制限します。 |
-f |
コマンドライン全体を対象に検査します。 |
-TERM |
SIGTERMを明示的に送ります。 |
-e |
サポートされている実装では、シグナルを送った対象の情報を表示します。 |
使用する際の注意点
pkill -fはコマンドラインの一部だけでも複数の作業を選択できます。サービスを管理する際は、可能であればサービス管理ツールの正常終了手順を優先してください。SIGKILLはクリーンアップ作業をスキップさせるため、最初の手段としては通常使いません。procps-ngの終了状態0は少なくとも一つへ送信できたことを意味し、全対象の送信成功や終了完了を保証しません。1は対象なし、またはどの対象へも送信できない場合などなので、対象ごとの状態とエラーを確認します。
よくある質問
pkillとpgrepの違いは何ですか?
pgrepは条件に合うPIDを探し、pkillは条件に合うプロセスに実際にシグナルを送ります。
公式ドキュメント
オプションの正確な動作や実装ごとの差異は、pkill関連の公式ドキュメントで確認できます。




