【シグナル】

シグナル とは?

💡 プロセスへの「肩たたき」、終了してほしいときも緊急停止も全部シグナルで伝える
📌 このページのポイント
主なシグナルの種類と動作 送信元 kill コマンド Ctrl+C カーネル プロセス シグナル受信 ハンドラで独自処理を実行 デフォルト動作(終了等) シグナルを無視(SIG_IGN) よく使うシグナル SIGTERM (15) 丁寧な終了要求 後片付けしてから 終了できる ハンドル: 可 SIGKILL (9) 強制終了 即座に終了 拒否不可 ハンドル: 不可 SIGINT (2) 割り込み Ctrl+C で送信 フォアグラウンド ハンドル: 可 SIGHUP (1) ハングアップ 端末切断時 設定再読み込み ハンドル: 可
シグナルの種類と動作の選択肢
ひよこ ひよこ

シグナルってプロセスに何かを伝える仕組みなの?

ペンギン先生 ペンギン先生

そうだよ。シグナルはプロセスへの「肩たたき」みたいなもので、「そろそろ終了してね」とか「一時停止して」とか「設定を再読み込みして」といった通知を送る仕組みなんだ

ひよこ ひよこ

Ctrl+Cを押すと止まるのもシグナルなの?

ペンギン先生 ペンギン先生

その通り!Ctrl+Cを押すと `SIGINT`(シグナル番号2)というシグナルが送られて、プログラムが中断されるんだ。Ctrl+Zで一時停止するのは `SIGTSTP`、Ctrl+\\で強制終了するのは `SIGQUIT` だよ

ひよこ ひよこ

kill コマンドは名前の通り「殺す」コマンドなの?

ペンギン先生 ペンギン先生

実は「シグナルを送る」コマンドなんだ。`kill -15 PID` で `SIGTERM`(丁寧な終了要求)を送り、`kill -9 PID` で `SIGKILL`(強制終了)を送る。SIGTERM ならプロセスは後片付けしてから終了できるけど、SIGKILL はカーネルが即座にプロセスを消すから拒否できないんだよ

ひよこ ひよこ

シグナルって全部で何種類くらいあるの?

ペンギン先生 ペンギン先生

標準的なシグナルは約30種類あるよ。よく使うのは SIGTERM(15)、SIGKILL(9)、SIGINT(2)、SIGHUP(1)、SIGUSR1/SIGUSR2(ユーザー定義)あたりだね。`kill -l` コマンドで全一覧を確認できるよ

ひよこ ひよこ

シグナルを受けたときの動作を変えることってできるの?

ペンギン先生 ペンギン先生

できるよ!プログラム内で「シグナルハンドラ」を登録すると、特定のシグナルを受けたときにカスタム処理を実行できるんだ。たとえば SIGHUP を受けたら設定ファイルを再読み込みするWebサーバーは多いね。ただし SIGKILL と SIGSTOP だけは例外で、ハンドラを設定できない。これは暴走したプロセスを確実に止められるようにするためのOS側の安全装置だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「シグナル」って出てきたら「プロセスに送る通知・合図の仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「signal」 = 信号・合図
💬 プロセスに「信号(signal)」を送って動作を制御することからこの名前がついたよ
← 用語集にもどる