killコマンドでプロセスを終了する方法|SIGTERM・SIGKILLの違いも解説

  • URLをコピーしました!

前の記事では、 psやtopを使って、 Linux上で動いているプロセスを確認する方法を学習しました。

では、確認したプロセスが応答しなくなったり、 何らかの理由で終了させる必要がある場合はどうすればよいのでしょうか。

STEP 01 ps / top

問題のプロセスを確認

→
STEP 02 PIDを確認

対象プロセスを特定

→
STEP 03 kill

終了を要求する

Linuxでは、このような場合に killコマンドを利用できます。

ただし、killは単純に 「プロセスを強制終了するコマンド」 というわけではありません。

IMPORTANT killは「プロセスへシグナルを送る」コマンド

killコマンドの本質を理解するには、 Linuxのシグナルについて理解することが重要です。

🐧 LINUX INTERMEDIATE

この記事はLinux中級講座の一部です。 killコマンドとシグナルの仕組みを理解し、 プロセスを安全に終了する方法を学習します。

Linux中級講座を見る →
LESSON GOAL この記事のゴール

killコマンドでPIDを指定して プロセスへ終了を要求できるようになり、 SIGTERMとSIGKILLの違いを理解して 適切に使い分けられる状態を目指します。

目次

killコマンドとは?

killは、 指定したプロセスへ シグナル(signal)を送信するコマンドです。

基本的な書式は次のとおりです。

kill [オプション] PID

たとえばPIDが 1400 のプロセスへ終了を要求する場合は、 次のように実行します。

kill 1400
Linux Terminal
$ ps aux | grep mysqld
mysql     1400  2.8  8.2 950000 330000 ?   Ssl  09:05  4:31 mysqld

$ kill 1400

これによってPID 1400のプロセスへ 終了を要求できます。

シグナルとは?

Linuxでは、プロセスに対して 「終了してください」「停止してください」「再開してください」 といった通知を送る仕組みがあります。

この通知が シグナル(signal) です。

COMMAND kill 1400
→
SIGNAL SIGTERM
→
PROCESS PID 1400

つまりkillコマンドは、 プロセスそのものを直接消しているというより、 指定したプロセスへシグナルを送っている と考えると理解しやすくなります。

kill PIDではSIGTERMが送られる

シグナルを指定せずに kill PID を実行すると、通常は SIGTERM というシグナルが送られます。

kill 1400
kill 1400 = kill -15 1400 = kill -TERM 1400

いずれもPID 1400へ SIGTERMを送る操作です。

SIGNAL 15 SIGTERM

プロセスへ 「安全に終了してください」 と要求するための代表的なシグナルです。

SIGTERMは「終了する機会」をプロセスへ与える

SIGTERMを受け取ったプロセスは、 終了前に必要な処理を行える場合があります。

01 SIGTERM受信
↓
02 終了処理 データ保存・接続終了など
↓
03 プロセス終了

実際にどのような終了処理を行うかは プログラムによって異なりますが、 基本的にはまずSIGTERMで正常終了を要求する と覚えておきましょう。

kill -9とは?SIGKILLによる強制終了

プロセスが異常な状態になっている場合、 SIGTERMを送っても終了しないことがあります。

そのような場合に登場するのが、 SIGKILLです。

kill -9 1400

-9は、 シグナル番号9の SIGKILLを意味します。

SIGNAL 9 SIGKILL

プロセス側で無視したり処理したりできない 強制的な終了シグナルです。

SIGTERMとSIGKILLの違い

SIGNAL 15 SIGTERM

終了を要求する

プロセス側が終了処理を行える余地があります。

kill PID 基本はこちらを先に使う
SIGNAL 9 SIGKILL

強制終了する

プロセス側で処理できず、強制的に終了させます。

kill -9 PID 必要な場合の最終手段
SIGTERM 「終了してください」
VS
SIGKILL 「強制終了」

最初からkill -9を使わない理由

「強制終了できるなら、 最初からkill -9を使えばよいのでは?」 と思うかもしれません。

しかし、基本的にはおすすめできません。

01 終了処理ができない

プログラムが本来行う終了処理を実行できません。

02 処理途中で終了する

ファイルやデータを処理している途中かもしれません。

03 原因調査を妨げる

何が起きていたのか確認する前にプロセスを消してしまう可能性があります。

IMPORTANT 「動かないからkill -9」は避ける

まずプロセスの状態や影響を確認し、 SIGTERMなど通常の終了方法を試します。 SIGKILLは、それでも終了できない場合に検討します。

安全にプロセスを終了する基本手順

実務では、いきなりkillを実行するのではなく、 対象を確認してから終了する ことが重要です。

STEP 01 プロセスを確認 ps aux | grep process
↓
STEP 02 PID・対象・影響を確認 PID 1400
↓
STEP 03 通常終了を要求 kill 1400
↓
STEP 04 終了したか確認 ps aux | grep process
↓
STEP 05 必要な場合のみ強制終了 kill -9 1400

誰のプロセスでも終了できるわけではない

Linuxでは、 ユーザが自由にすべてのプロセスへ シグナルを送れるわけではありません。

たとえば一般ユーザで、 別ユーザが所有するプロセスを終了しようとすると、 権限不足になることがあります。

$ kill 1400
-bash: kill: (1400) - Operation not permitted

このような場合、 必要な権限があり、かつ終了して問題ないプロセスであることを確認したうえで、 管理者権限を利用することがあります。

sudo kill 1400
Linuxの権限管理とプロセス管理はつながっている

Linux中級の前半で学習した ユーザや権限の考え方は、 プロセス管理でも重要になります。

ほかにはどんなシグナルがある?

LinuxにはSIGTERM・SIGKILL以外にも 多くのシグナルがあります。

シグナル一覧は次のコマンドで確認できます。

kill -l
$ kill -l
 1) SIGHUP     2) SIGINT     3) SIGQUIT
 9) SIGKILL   15) SIGTERM   18) SIGCONT
19) SIGSTOP   ...

すべてを暗記する必要はありません。 まずは次の2つを確実に理解しておきましょう。

シグナル 番号 役割
SIGTERM 15 通常の終了要求
SIGKILL 9 強制終了

ここで実際に試してみよう:killコマンド疑似ターミナル

ここでは疑似Linux環境で、 プロセスの確認から終了まで 実際に操作してみましょう。

まず ps aux を実行して、動いているプロセスを確認してください。

INTERACTIVE LAB

Linux Process Control

RUNNING
PROCESS demo-worker
PID 1400
STATUS RUNNING
● ● ● user@linux
Linux kill command practice
まず「ps aux」を実行してPIDを確認してください。
user@linux:~$
START

まずプロセスを確認しましょう

ps auxを実行してdemo-workerのPIDを探してください。

おすすめの操作順

1 ps aux

PID 1400を確認

→
2 kill 1400

SIGTERMを送信

→
3 ps aux

終了を確認

一度終了したら reset を実行してプロセスを復活させ、 kill -9 1400 も試してみてください。

理解度チェック:どのコマンドを実行する?

次の状況を考えてみましょう。

SCENARIO PID 3250のプロセスが応答しなくなった

プロセスを終了する必要がありますが、 まだ通常の終了要求は試していません。

最初に実行するコマンドとして適切なのはどれでしょうか?

回答を選択してください

SIGTERMとSIGKILLの違いを思い出してみましょう。

サービスはkillで止めればよい?

ここまで学習すると、 「WebサーバやSSHなどもプロセスなのだから、 killで終了すればよいのでは?」 と思うかもしれません。

確かにサービスもLinux上では プロセスとして動いています。

SERVICE nginx
→
PROCESS nginx PID 1250

しかし、systemdを利用するLinuxでは、 サービスの起動・停止・再起動などは systemctlを使って管理するのが基本です。

systemctl stop nginx
killとsystemctlは役割が違う

killはプロセスへシグナルを送るためのコマンドです。 一方、systemctlはsystemdが管理するサービスを操作する ために利用します。

この違いを理解すると、 Linuxのプロセス管理とサービス管理がつながって見えてきます。

確認問題:killコマンドの基本を確認しよう

QUESTION 01

「kill 1400」を実行した場合、通常送信されるシグナルはどれですか?

正解:B

シグナルを指定せずにkillを実行すると、 通常はSIGTERM(シグナル番号15)が送信されます。

QUESTION 02

「kill -9 1400」が意味するものはどれですか?

正解:C

-9はシグナル番号9のSIGKILLを指定しています。 SIGKILLはプロセス側で処理できない強制終了シグナルです。

QUESTION 03

プロセスを終了するときの基本的な考え方として適切なのはどれですか?

正解:A

基本は対象プロセスを確認したうえでSIGTERMによる終了を試します。 SIGKILLは通常の方法で終了できない場合などに検討します。

YOUR SCORE 0 / 3

3問に挑戦してみましょう。

まとめ

01

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

02

kill PIDでは通常 SIGTERM(15)が送信される

03

kill -9 PIDでは SIGKILL(9)が送信される

04

基本はSIGTERMを先に試し、 SIGKILLは必要な場合に利用する

05

killする前後には psなどで対象プロセスと終了結果を確認する

NEXT LESSON

次は「systemctlでLinuxサービスを管理する」を学びましょう

ps・top・killを使って、 Linuxのプロセスを確認・終了する方法を学習しました。

次の記事では視点を 「個々のプロセス」からサービスへ広げます。

systemctlを使ったサービスの 起動・停止・再起動・状態確認・自動起動設定を学習し、 Linuxサーバ運用で頻繁に使うサービス管理の基本を身につけます。

systemctlでLinuxサービスを管理する →
LINUX INTERMEDIATE

Linux中級講座の一覧へ戻る

Linux中級の学習順を確認したい場合は、 講座一覧へ戻りましょう。

← Linux中級講座へ戻る
目次