【しぐなる】
シグナル(OS) とは?
最終更新:
💡 プロセスへの通知。既定の動作と処理の変更を確認
UNIXやLinuxで、プロセスやスレッドに出来事を伝える通知の仕組み。OSによる生成や別のプロセスからの送信があり、種類ごとに既定の動作や変更できる処理が異なる。
📌 このページのポイント
- SIGTERMは終了要求で、ハンドラによる後処理や無視が可能
- SIGKILLは強制終了、SIGSTOPは実行の一時停止で、捕捉・ブロック・無視できない
- 通常の端末設定ではCtrl+Cで前面のジョブへSIGINTを送る
- SIGHUPの既定は終了。設定再読み込みはアプリが実装した動作
Ctrl+Cでプログラムが止まるとき、何が起きているの?
OSだけがシグナルを送るの?
SIGTERMとSIGKILL、SIGSTOPはどう違う?
SIGTERMの既定は終了だけれど、ハンドラで後処理を行う設計や無視が可能だよ。SIGKILLは強制終了、SIGSTOPは実行を一時停止する。SIGKILLとSIGSTOPは捕捉・ブロック・無視ができない。停止した処理の再開にはSIGCONTを使うんだ。
止まらなければ、すぐ強制終了すればいい?
まず対象と、そのプログラムに合う終了方法を確認しよう。SIGTERMなどで終了を要求し、必要に応じて強制終了を検討する。SIGKILLではアプリ自身の後処理を行えないので、書き込みや作業の途中状態に注意するんだ。
SIGHUPを送れば設定を読み直す?
ハンドラではログを書いたり、何でもできる?
Cのシグナルハンドラ内で安全に呼べる関数には制限があるよ。たとえばprintfは安全に呼べる関数ではない。処理を小さくし、必要な作業は通常の処理側へ渡すなど、使う言語や実行環境の方法を確認しよう。ハンドラを登録できないSIGKILLとSIGSTOPにも注意だね。
📖 おまけ:英語の意味
「Signal」 = 信号・合図
💬 Signalは信号や合図という意味。終了要求や端末の中断など、出来事を伝える通知として使われるよ