
新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)
といった動作がそれにあたります。
📌 シグナルが送られると、プロセスはそれに対応した「動作(デフォルト動作)」を実行します。
ただし、開発者がプログラム内でシグナルを“無視”したり、“独自の処理”を割り当てることも可能です。
🔍 代表的なシグナル一覧(主要なもの)
| シグナル番号 | シグナル名 | 意味・動作 |
|---|---|---|
| 1 | SIGHUP | 端末の切断や設定再読み込み(デーモン再起動によく使用) |
| 2 | SIGINT | キーボード(Ctrl + C)による割り込み |
| 3 | SIGQUIT | 強制中断(コアダンプ生成あり) |
| 9 | SIGKILL | 強制終了(捕捉・無視不可) |
| 15 | SIGTERM | 正常終了要求(デフォルトの終了シグナル) |
| 19 | SIGSTOP | プロセスの一時停止(捕捉・無視不可) |
| 18 | SIGCONT | 停止したプロセスを再開する |
| 11 | SIGSEGV | メモリアクセス違反(セグメンテーションフォルト) |
| 13 | SIGPIPE | 切断済みパイプへの書き込み(多くはプログラム異常) |
| 14 | SIGALRM | アラームタイマーからのシグナル(タイムアウトなど) |
💬ポイント
Linuxの世界では「プロセスの終了」は、SIGTERM(15番) または SIGKILL(9番) によって行われることが多いです。
SIGTERMは「やさしい終了」、SIGKILLは「問答無用の強制終了」と覚えるとわかりやすいですよ🔧
🧾 よく使うシグナルだけをまとめると…
| シグナルID | シグナル名 | 動作 |
|---|---|---|
| 9 | KILL | 強制終了(無視・捕捉できない) |
| 15 | TERM | 終了要求(安全に終了) |
| 19 | STOP | プロセスを一時停止 |
| 18 | CONT | 停止していたプロセスを再開 |
💡ポイント
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の奥深さが見えてきますよ😉
