新Linux入門|プロセスの終了とは:Linuxで学ぶプロセスの終了処理とシグナルの基本

 Linuxを使っていると「プロセスが終了した」「強制終了した」といった言葉をよく耳にしますよね。
 でも、実際にプロセスがどんな仕組みで終了しているのか、そしてどんなときに強制的に終了させられるのかを理解している人は少なくありません。

 この記事では、「プロセスがどのように終了するのか」そして「そのときに使われるシグナル(signal)」について、やさしく解説していきます✨

⚙️ プロセス終了の基本

 Linuxにおける「プロセスの終了」とは、そのプログラムが実行すべき処理を終え、使用していたリソースを解放することを指します。
 プロセスが終了すると、メモリやファイルディスクリプタなどのリソースが解放され、親プロセスに「終了しました!」という通知(終了ステータス)が返されます。

💡 終了ステータス は、正常終了であれば 0、エラー終了であれば 0以外 の値が返されます。
この値は、シェルスクリプトやコマンドの分岐処理(if文など)で利用されます。

🧠 例:cal コマンドの実行から終了まで

 ここでは「cal(カレンダー表示コマンド)」を例に、プロセスの誕生から終了までを見てみましょう📅

ステップ動作内容
① コマンド入力suzukiがシェル上で cal と入力する。
② プロセス生成bash(親プロセス)が fork() を使って子プロセスを生成。
③ 実行開始子プロセスが exec() によって cal 実行ファイルを読み込み、処理を開始。
④ 出力処理calコマンドがカレンダーを表示。
⑤ 終了処理処理完了後、終了ステータス(例:0)を返して終了。
⑥ リソース解放使用していたメモリやファイルディスクリプタがカーネルによって解放される。

実行例👇

[suzuki@AlmaLinux ~]$ cal
     November 2025
Su Mo Tu We Th Fr Sa
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
[suzuki@AlmaLinux ~]$

💬ポイント
このように、プロセスは短時間で「生成→実行→終了→リソース解放」という流れをたどります。
この“終了”を安全に行うために使われるのが「シグナル(signal)」です📨

🚦 シグナルとは

シグナル(signal) は、プロセス間通信や制御のために使われる「通知」の仕組みです。
システムやユーザーが、特定のイベントをプロセスに伝えるために送信します。

たとえば、

  • Ctrl + C を押してプログラムを中断する(SIGINT)
  • 強制終了させたいときに kill コマンドでシグナルを送る(SIGKILL)
    といった動作がそれにあたります。

📌 シグナルが送られると、プロセスはそれに対応した「動作(デフォルト動作)」を実行します。
 ただし、開発者がプログラム内でシグナルを“無視”したり、“独自の処理”を割り当てることも可能です。

🔍 代表的なシグナル一覧(主要なもの)

シグナル番号シグナル名意味・動作
1SIGHUP端末の切断や設定再読み込み(デーモン再起動によく使用)
2SIGINTキーボード(Ctrl + C)による割り込み
3SIGQUIT強制中断(コアダンプ生成あり)
9SIGKILL強制終了(捕捉・無視不可)
15SIGTERM正常終了要求(デフォルトの終了シグナル)
19SIGSTOPプロセスの一時停止(捕捉・無視不可)
18SIGCONT停止したプロセスを再開する
11SIGSEGVメモリアクセス違反(セグメンテーションフォルト)
13SIGPIPE切断済みパイプへの書き込み(多くはプログラム異常)
14SIGALRMアラームタイマーからのシグナル(タイムアウトなど)

💬ポイント
 Linuxの世界では「プロセスの終了」は、SIGTERM(15番) または SIGKILL(9番) によって行われることが多いです。
SIGTERMは「やさしい終了」、SIGKILLは「問答無用の強制終了」と覚えるとわかりやすいですよ🔧

🧾 よく使うシグナルだけをまとめると…

シグナルIDシグナル名動作
9KILL強制終了(無視・捕捉できない)
15TERM終了要求(安全に終了)
19STOPプロセスを一時停止
18CONT停止していたプロセスを再開

💡ポイント
kill -15 PID(または単に kill PID)は通常終了、
kill -9 PID は「どうしても終わらないプロセスを強制終了」するために使われます。

🧰 kill コマンドの基本

コマンド説明
kill [オプション] PID指定したPIDにシグナルを送信する。
kill -l使用可能なシグナル一覧を表示する。

よく使うオプション👇

オプション説明
-9強制終了(SIGKILL)
-15通常終了(SIGTERM)
-STOP一時停止(SIGSTOP)
-CONT停止中のプロセスを再開(SIGCONT)

💡 使用例

通常終了(TERM)

[root@AlmaLinux ~]# kill -15 3250

強制終了(KILL)

[root@AlmaLinux ~]# kill -9 3250

停止・再開

[root@AlmaLinux ~]# kill -STOP 3250
[root@AlmaLinux ~]# kill -CONT 3250

💬ポイント
kill コマンドは「プロセスを殺す」のではなく、「シグナルを送る」コマンドです。
つまり、優しくお願いする(TERM) か、強制的に止める(KILL) かの違いなんです😄

🌈 まとめ

  • プロセスは実行を終えると、リソースを解放し終了ステータスを返す。
  • シグナルは、プロセスに「終了・停止・再開」を伝えるための仕組み。
  • killコマンドを使えば、シグナルを送ってプロセスを制御できる。
  • SIGTERM(優しい終了)とSIGKILL(強制終了)の違いを覚えておこう!

Linuxを理解するうえで、「プロセスがどう生まれ、どう終わるか」を知ることはとても大切です。
次にプロセスを終了させるとき、ただ止めるのではなく、
 「今、どんなシグナルを送っているんだろう?」と少し意識してみると、Linuxの奥深さが見えてきますよ😉