こんにちは、インフラエンジニアのryuです。
Linuxで動かしたプログラムが終わらない。 負荷の高いプロセスを停止したい。
そんなときに使うのが、killコマンドです。
名前を見ると、プロセスを強制終了するコマンドに思えますよね。
しかし、killコマンドが行っているのは、プロセスへシグナルを送ることです。
この記事では、PIDの確認から通常終了、強制終了、pkill・killallとの違いまで初心者向けに解説します。
killコマンドとは?¶
killコマンドは、指定したプロセスへシグナルを送ります。
基本的な書式は以下です。
kill [シグナル] PID
シグナルを省略すると、通常はSIGTERMが送られます。
kill 1234
SIGTERMは、プロセスへ終了を依頼するシグナルです。
アプリケーション側で受け取れるため、ファイルを閉じたり、一時データを保存したりしてから終了できます。
そのため、プロセスを停止するときは、まずシグナルを省略したkill PIDを試します。
PIDを確認してから終了する¶
killコマンドでは、対象のPIDを指定します。
PIDはpsやpgrepで確認できます。
ps aux | grep '[n]ginx'
プロセス名が分かっている場合は、pgrepも便利です。
pgrep -a nginx
実行結果が次のように表示されたとします。
1234 nginx: master process /usr/sbin/nginx
1250 nginx: worker process
停止対象がPID 1234なら、以下を実行します。
kill 1234
その後、終了したか確認します。
ps -p 1234
何も表示されなければ、対象のプロセスは終了しています。
PIDの調べ方は、Linuxのpsコマンドの使い方でも詳しく解説しています。
よく使うシグナル一覧¶
利用できるシグナルは、以下のコマンドで確認できます。
kill -l

よく使うものを整理すると、以下の通りです。
| シグナル | 一般的な番号 | 主な動作 |
|---|---|---|
SIGHUP |
1 | 端末切断の通知。設定再読み込みに使うプログラムもある |
SIGINT |
2 | キーボードのCtrl + Cに相当する割り込み |
SIGTERM |
15 | 通常の終了を依頼する |
SIGKILL |
9 | プロセスを強制終了する |
SIGSTOP |
19 | プロセスを一時停止する |
SIGCONT |
18 | 停止中のプロセスを再開する |
シグナル番号は環境によって異なる場合があります。
スクリプトでは、番号よりTERMやKILLなどの名前を使うと意味も伝わりやすいです。
kill -TERM 1234
kill -SIGTERM 1234
どちらもSIGTERMを送ります。
SIGTERMとSIGKILLの違い¶
プロセス終了で特に重要なのが、SIGTERMとSIGKILLの違いです。
| 比較 | SIGTERM | SIGKILL |
|---|---|---|
| 目的 | 正常な終了を依頼する | 強制的に終了する |
| プロセス側の処理 | 受信して終了処理を行える | 受信・無視・処理できない |
| データ保存 | 行える可能性がある | 行えない |
| 最初に使うか | 基本はこちら | 最終手段 |
通常は、以下の順番で進めます。
kill 1234
sleep 3
ps -p 1234
終了しない場合は、ログやプロセス状態を確認します。
どうしても停止せず、影響を理解したうえで強制終了するときにSIGKILLを使います。
kill -KILL 1234
次の書き方も同じ意味です。
kill -9 1234
いきなりkill -9を使わない¶
SIGKILLは、プロセスが終了処理を行う前に強制終了します。
書き込み中のデータ、一時ファイル、ロック情報などが残る可能性があります。
データベースやアプリケーションを強制終了すると、復旧処理が必要になることもあります。
止まらないからすぐkill -9ではなく、まずSIGTERMを送ることが大切です。
systemdのサービスはsystemctlで停止する¶
Nginx、Apache、SSHなど、systemdで管理されているサービスを停止する場合は、直接PIDへkillするよりsystemctlを使います。
sudo systemctl stop nginx
状態も確認します。
systemctl status nginx
systemctlで停止すると、サービスに定義された停止手順やタイムアウトに従って処理されます。
ワーカープロセスだけをkillしても、管理プロセスによって再起動されたり、一部だけ動き続けたりすることがあります。
サービス名が分からない場合は、プロセス情報やユニット一覧を確認してください。
systemctl status 1234
対応している環境では、PIDから所属するサービスを確認できます。
シグナル0でプロセスを確認する¶
シグナル番号の0を指定すると、実際のシグナルを送らずにプロセスの存在や送信権限を確認できます。
kill -0 1234
成功した場合は、通常何も表示されません。
存在しないPIDなら、次のようなエラーになります。
bash: kill: (1234) - No such process
権限がない場合は、Operation not permittedなどが表示されます。
シェルスクリプトで、プロセスが動いているか確認するときにも利用できます。
if kill -0 "$pid" 2>/dev/null; then
echo "process is running"
else
echo "process is not running"
fi
プロセスを一時停止・再開する¶
killコマンドは、終了以外の操作にも使えます。
プロセスを一時停止する場合は、SIGSTOPを送ります。
kill -STOP 1234
再開する場合は、SIGCONTを送ります。
kill -CONT 1234
状態はpsで確認できます。
ps -p 1234 -o pid,stat,cmd
停止中は、STATにTが表示されます。
処理が止まっているように見える場合は、意図せず停止状態になっていないか確認しましょう。
SIGHUPで設定を再読み込みする¶
一部のサーバープログラムは、SIGHUPを受け取ると設定を再読み込みします。
kill -HUP 1234
ただし、SIGHUPを受けたときの動作はプログラムによって異なります。
終了するプログラムもあるため、必ず公式ドキュメントやサービスの操作方法を確認してください。
systemdサービスなら、再読み込みに以下を使える場合があります。
sudo systemctl reload nginx
reloadに対応していないサービスもあります。
実行前に、systemctl statusやサービスの仕様を確認しましょう。
pkillコマンドの使い方¶
pkillは、プロセス名や条件を指定してシグナルを送ります。
pkill nginx
シグナルを省略すると、通常はSIGTERMが送られます。
完全に一致するプロセス名だけを対象にする場合は、-xを付けます。
pkill -x nginx
特定ユーザーのプロセスだけを対象にすることもできます。
pkill -u user1 -x sleep
実行前に、同じ条件をpgrepで確認すると安全です。
pgrep -a -u user1 -x sleep
pkill -u user1 -x sleep
複数のプロセスが一致する可能性があるため、対象を確認してから実行してください。
killallコマンドの使い方¶
killallは、指定したコマンド名で動くプロセスへまとめてシグナルを送ります。
killall nginx
シグナルを指定する場合は、以下の通りです。
killall -TERM nginx
Linuxのkillallは、同じ名前の複数プロセスを対象にします。
似た名前のコマンドとOSによる挙動の違いもあるため、実行前にpgrep -a -xなどで対象を確認しましょう。
1つのPIDだけを確実に止めたい場合は、killコマンドの方が意図を明確にできます。
killでプロセスを終了できない原因¶
killを実行しても停止しない場合は、すぐSIGKILLへ進まず、原因を確認します。
プロセスを操作する権限がない¶
通常、ほかのユーザーのプロセスへシグナルを送ることはできません。
必要な場合は、対象を十分に確認したうえでsudoを使います。
sudo kill 1234
PIDがすでに変わっている¶
プロセスが再起動されると、PIDが変わる場合があります。
もう一度psやpgrepで確認してください。
pgrep -a nginx
systemdや監視ツールが再起動している¶
停止直後に新しいPIDで起動する場合は、systemd、コンテナ、プロセス監視ツールなどが再起動している可能性があります。
管理元を確認し、その仕組みから停止します。
D状態になっている¶
STATがDのプロセスは、割り込みできない入出力待ちになっています。
ディスクやネットワークストレージの応答を待っている場合、SIGKILLを送ってもすぐには消えないことがあります。
ストレージやカーネルログを確認し、待ちの原因を調べましょう。
エンジニア歴10年で意識していること¶
私はエンジニアとして10年以上Linuxサーバーを扱っていますが、負荷の高いプロセスを見つけても、すぐkillすることはありません。
そのプロセスが何の処理をしているのか、停止するとどのサービスへ影響するのか、再起動される仕組みがあるのかを確認します。
障害対応では、プロセスを止めることで一時的に復旧できることがあります。
しかし、停止前の状態やログを残さなければ、なぜ問題が起きたのか分からなくなります。
【関連記事】インフラの障害対応で最初にやるべきこと
killコマンドの使い方まとめ¶
killコマンドは、指定したPIDへシグナルを送ります。
シグナルを省略した場合は、通常SIGTERMが送られます。
kill 1234
まずSIGTERMで正常終了を依頼し、終了しない原因を確認します。
SIGKILLは、ほかの方法で停止できず、影響を理解している場合の最終手段です。
kill -KILL 1234
systemdで管理されるサービスは、systemctl stopを優先しましょう。
プロセス名だけで判断せず、PID、実行ユーザー、役割、停止時の影響を確認してから操作することが大切です。
Linuxのプロセス管理を実際に学びたい方へ¶
InfraAcademyでは、ブラウザ上のLinux環境でプロセスを起動し、psやkillを実行しながら学習できます。
基本操作から学びたい方は、Linux入門講座を確認してみてください。
プロセスやサービス管理まで学びたい方は、Linux中級講座がおすすめです。