InfraAcademy

InfraAcademy Blog

【Linux】killコマンドの使い方解説!killコマンドを使ってプロセスを終了させる

| #Linux #Linux初心者 #コマンド
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、インフラエンジニアのryuです。

Linuxで動かしたプログラムが終わらない。 負荷の高いプロセスを停止したい。

そんなときに使うのが、killコマンドです。

名前を見ると、プロセスを強制終了するコマンドに思えますよね。

しかし、killコマンドが行っているのは、プロセスへシグナルを送ることです。

この記事では、PIDの確認から通常終了、強制終了、pkillkillallとの違いまで初心者向けに解説します。

killコマンドとは?

killコマンドは、指定したプロセスへシグナルを送ります。

基本的な書式は以下です。

kill [シグナル] PID

シグナルを省略すると、通常はSIGTERMが送られます。

kill 1234

SIGTERMは、プロセスへ終了を依頼するシグナルです。

アプリケーション側で受け取れるため、ファイルを閉じたり、一時データを保存したりしてから終了できます。

そのため、プロセスを停止するときは、まずシグナルを省略したkill PIDを試します。

PIDを確認してから終了する

killコマンドでは、対象のPIDを指定します。

PIDはpspgrepで確認できます。

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

killコマンドで利用できるシグナル一覧

よく使うものを整理すると、以下の通りです。

シグナル 一般的な番号 主な動作
SIGHUP 1 端末切断の通知。設定再読み込みに使うプログラムもある
SIGINT 2 キーボードのCtrl + Cに相当する割り込み
SIGTERM 15 通常の終了を依頼する
SIGKILL 9 プロセスを強制終了する
SIGSTOP 19 プロセスを一時停止する
SIGCONT 18 停止中のプロセスを再開する

シグナル番号は環境によって異なる場合があります。

スクリプトでは、番号よりTERMKILLなどの名前を使うと意味も伝わりやすいです。

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が変わる場合があります。

もう一度pspgrepで確認してください。

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中級講座がおすすめです。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る