このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

新Linuxコマンド演習52

新Linuxコマンド演習52 概要

新Linuxコマンド演習52」では、killコマンドおよびkillallコマンドを使用して、
特定のプロセスにシグナルを送信し、安全に終了・強制終了する操作を学びます。

 Linuxでは、すべてのプロセスが「シグナル」と呼ばれるメッセージを受け取る仕組みを持っています。
たとえば、ユーザーがプロセスを停止・再開・終了したいときには、
このシグナルを使ってプロセスに指示を送ります。

kill・killall コマンドの概要

コマンド主な目的主なオプション説明
kill特定のプロセスID(PID)にシグナルを送信する-l, -9, -15任意のPIDに対して終了シグナルを送信
killallプロセス名を指定してシグナルを送信する-SIGTERM, -SIGKILL同一名の全プロセスを一括終了

表の説明
kill は PID(プロセスID) を指定してシグナルを送信します。
一方 killall は プロセス名 を指定して、同名のプロセスすべてにシグナルを送信します。
たとえば「gedit」や「firefox」など、複数のインスタンスが動作している場合に便利です。

主なシグナル一覧

シグナル名番号意味説明
SIGHUP1ハングアップ設定再読み込みやセッション切断通知
SIGINT2割り込みCtrl + C で送信される一般的な終了要求
SIGTERM15終了要求通常のプロセス終了(安全に停止)
SIGKILL9強制終了即時終了(プロセスは後処理不可)
SIGSTOP19一時停止プロセスを停止するが削除しない。
SIGCONT18再開停止したプロセスを再開する。

補足
SIGTERM(15)はプロセスに正常終了のチャンスを与えます。
SIGKILL(9)は強制終了であり、プロセスは後処理できません。
そのため、まずはSIGTERMを使用し、どうしても終了しない場合のみSIGKILLを使うのが原則です。

演習問題+模範解答例

演習01:利用可能なシグナルの一覧を表示する

問題
kill コマンドを使用して、利用可能なシグナルの一覧を表示してください。

模範解答例

[suzuki@AlmaLinux ~]$ kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT   4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE    9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE  14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
...
63) SIGRTMAX-1 64) SIGRTMAX

解説
kill -l は、システムで利用可能な全シグナルの一覧を表示します。
各シグナルには名前(例:SIGTERM)と番号(例:15)が割り当てられています。
コマンド実行時にはどちらの形式(名前または番号)でも指定可能です。

演習02:プロセスを強制終了する

問題
gedit をバックグラウンドで起動し、そのプロセスを強制終了してください。
(※PIDは実行時に確認すること)

模範解答例

[suzuki@AlmaLinux ~]$ gedit &
[1] 5205
[suzuki@AlmaLinux ~]$ ps
  PID TTY          TIME CMD
 5043 pts/0    00:00:00 bash
 7429 pts/0    00:00:00 gedit
 7433 pts/0    00:00:00 ps

gedit がバックグラウンドで起動したことを確認します。

次に、PID「7429」を指定して強制終了します。

[suzuki@AlmaLinux ~]$ kill -9 7429
[1]+  強制終了            gedit

解説
kill -9 は SIGKILL シグナルを送信します。
これはプロセスが後処理を行う暇もなく即座に終了させるため、最終手段として使用します。
通常はまず kill -15(SIGTERM)で安全に終了できるか試すのが望ましいです。

演習03:プロセス名を指定して終了する

問題
 firefox をバックグラウンドで起動し、killall コマンドを使ってプロセス名を指定して終了させてください。

模範解答例

[suzuki@AlmaLinux ~]$ firefox &
[2] 7481
[1]   強制終了            gedit
[suzuki@AlmaLinux ~]$ ps
    PID TTY          TIME CMD
   6405 pts/0    00:00:00 bash
   7481 pts/0    00:00:08 firefox
   7578 pts/0    00:00:00 Socket Process
   7614 pts/0    00:00:00 WebExtensions
   7619 pts/0    00:00:00 RDD Process
   7630 pts/0    00:00:00 Isolated Web Co
   7678 pts/0    00:00:00 file:// Content
   7696 pts/0    00:00:00 Privileged Cont
   7774 pts/0    00:00:00 Utility Process
   7782 pts/0    00:00:00 Web Content
   7784 pts/0    00:00:00 Web Content
   7806 pts/0    00:00:00 Web Content
   7875 pts/0    00:00:00 ps

firefox 関連の複数プロセスが動作していることが分かります。

これを一括で終了します。

[suzuki@AlmaLinux ~]$ killall -SIGTERM firefox

解説
killall はプロセス名を指定して同名プロセスを一括で制御します。
-SIGTERM は「安全な終了要求」を送信します。
終了しない場合は、次のように SIGKILL を使います。

killall -9 firefox

まとめ

新Linuxコマンド演習52」では、
Linuxにおけるプロセス制御の基本である シグナル送信の仕組み を学びました。

学習ポイント

  • kill -l でシグナル一覧を確認できる
  • kill -15 <PID>(SIGTERM)で安全に終了
  • kill -9 <PID>(SIGKILL)は即時強制終了
  • killall はプロセス名単位で一括終了可能

💡 注意点
 kill -9 はプロセスに後処理の機会を与えないため、保存されていないデータ損失のリスクがあります。
安全に停止できる場合は、まず SIGTERM を使用しましょう。