シグナル
シグナルは、OS やプロセスから別のプロセスへ送る軽量な非同期通知です。「終了して」「中断して」といった合図を番号で送り、受け手はハンドラで応じられます。
- 1.シグナルは、プロセスへ「合図」を送る非同期通知の仕組みで、データ本体は運べません。
- 2.SIGTERM は終了の依頼、SIGKILL は強制終了、SIGINT は Ctrl+C による中断です。
- 3.受け手はハンドラで処理を書けますが、SIGKILL と SIGSTOP だけは捕まえられません。
シグナルとは
シグナル は、OS やプロセスから別のプロセスへ送られる 軽量な非同期通知 です。「終了してほしい」「いま中断したい」といった 合図を1つ送る だけの仕組みで、それぞれの合図には SIGTERM や SIGINT のような 番号付きの名前 が付いています。
「非同期」とは、受け手プロセスの 実行中のどのタイミングでも割り込んで届きうる という意味です。届くと、受け手は現在の処理を一時中断して、そのシグナルに対応した動作を行います。
シグナルで送れるのは「どの種類か」という情報だけで、任意のメッセージは添えられません。データのやり取りには、パイプや共有メモリなどの IPC を使います。シグナルはあくまで「合図」です。
代表的なシグナル
実務でよく出会うものを挙げます。
| シグナル | 既定の動作 | 主な発生・用途 |
|---|---|---|
| SIGINT | 終了 | Ctrl+C による中断 |
| SIGTERM | 終了 | 「正常に終了して」の依頼(kill の既定) |
| SIGKILL | 強制終了 | 問答無用で停止(捕捉不可) |
| SIGHUP | 終了 | 端末切断・設定の再読み込み合図 |
| SIGSTOP | 一時停止 | 実行を止める(捕捉不可) |
| SIGCONT | 再開 | 停止中のプロセスを再開 |
| SIGSEGV | 異常終了 | 不正なメモリアクセス |
kill コマンドは「殺す」という名前ですが、実際は 任意のシグナルを送るコマンド です。引数を付けずに使うと既定で SIGTERM を送ります。
SIGTERM と SIGKILL の違い
終了させる2つは性質が大きく異なります。
- SIGTERM:「終了してください」という お願い。受け手はハンドラで捕まえ、開いたファイルを閉じる・保存する・後片付けをしてから 終了できます。
- SIGKILL:問答無用の強制終了。受け手は捕まえることも無視することもできず、後片付けの機会もなく即座に止められます。
kill 1234 # SIGTERM: 正常終了を依頼
kill -9 1234 # SIGKILL: 強制終了(最後の手段)
順序としては、まず SIGTERM で穏やかに頼み、応答しない場合に限って SIGKILL を使うのが定石です。いきなり kill -9 を多用すると、データの破損や中途半端な状態を残しやすくなります。
SIGTERM はプロセスに後片付けの猶予を与えます。いきなり SIGKILL を撃つと、書きかけのファイルやロックが中途半端なまま残ることがあります。強制終了は最後の手段と考えましょう。
シグナルハンドラ
プロセスは、特定のシグナルを受け取ったときに 自前の処理を実行 できます。この処理を シグナルハンドラ と呼びます。ハンドラを登録すると、既定の動作(終了など)の代わりに自分の関数が呼ばれます。
典型的な用途は 後片付け(グレースフルシャットダウン) です。SIGTERM を受けたら、新規リクエストの受付を止め、処理中のものを終えてから安全に終了する——といった制御ができます。
ただし、どんなシグナルでも捕まえられるわけではありません。
- 捕捉できる:
SIGTERM、SIGINT、SIGHUPなど多く - 捕捉も無視もできない:
SIGKILLとSIGSTOPの2つだけ
この2つが例外なのは、暴走したプロセスを OS が確実に止める手段 を残すためです。もしこれらも捕まえられたら、プロセスが終了を握りつぶせてしまいます。
ハンドラは実行中の処理へ割り込んで動くため、内部で呼べる関数には制約があります(途中で割り込まれても安全な操作に限られる)。重い処理を直接書くのではなく、「フラグを立てるだけ」にして本体側で対応するのが安全な定石です。
まとめ
- シグナルは、プロセスへ 合図を1つ送る非同期通知。データ本体は運べない。
- SIGTERM は終了依頼、SIGKILL は強制終了、SIGINT は Ctrl+C による中断。
- ハンドラで応答を書けるが、SIGKILL と SIGSTOP だけは捕捉も無視もできない。
- 終了させるなら まず SIGTERM、応答しなければ SIGKILL が定石。
プロセスの基礎は プロセスとスレッド、他の通信手段は プロセス間通信(IPC) も合わせてどうぞ。
OS Article
シグナルを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
シグナル
比較で見る軸
難易度: intermediate / カテゴリ: OS / タグ数: 4
導入後に効く点
SIGTERM は終了の依頼、SIGKILL は強制終了、SIGINT は Ctrl+C による中断です。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- intermediate
- カテゴリ
- OS
- タグ数
- 4
判断チェックリスト
- 自社の用途が「シグナル / プロセス」に近いか確認する。
- 強みである「シグナルは、プロセスへ「合図」を送る非同期通知の仕組みで、データ本体は運べません。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。