シグナル (Unix)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/09/26 14:03 UTC 版)
シグナル(英: signal)とは、Unix系(POSIX標準に類似の)オペレーティングシステム (OS) における、限定的なプロセス間通信であり、プロセスに対し非同期でイベントの発生を伝える機構である。シグナルが送信された際、OSは宛先プロセスの正常な処理の流れに割り込む。どんな不可分でない処理の間でも割り込むことができる。受信プロセスが以前にシグナルハンドラを登録しておけば、シグナル受信時にそのルーチンが実行される。さもなくば、デフォルトのシグナル処理が行われる。(同様なものは他のTSSなどでも開発されてはいるが、UNIXのシグナルは)1970年ごろベル研究所でUNIXに実装された。後にPOSIXである程度は標準化されているが、標準化が諦められているような振舞などもいくつかあり、特に他の幾つかの要素(fork等)とマルチスレッドとシグナルが絡むと実装毎の対処にプログラミングが大変になることがある。プロセスはI/O待ちなど、カーネルの内部で処理がブロックしている場合などで割り込み不可状態になることがあり、その場合は如何なるシグナルを送っても無効になる。
- ^ “SIG30-C. シグナルハンドラ内では非同期安全な関数のみを呼び出す”. JPCERT/CC セキュアコーディングスタンダード. JPCERT/CC. 2019年2月11日閲覧。
- ^ 脚注前項のリンク先記述には「
longjmp()
もPOSIXのsiglongjmp()
も、シグナルハンドラ内から呼び出してはならない。」とあるが、これは無条件に成立するものではなく、割り込まれた処理に依存するので不正確である。リンク先記述にあるサンプルコードは静的変数へのアクセスがあるためシグナルに対して安全ではないとしているが、適合コード例の他に、シグナルをマスクした上でその静的変数へアクセスすればlongjmp()
を残したままにすることができる。POSIX.1-2008 TC2はlongjmp()
およびsiglongjmp()
を、async-signal-safeではない関数や処理へシグナルが割り込んだ場合のリスクにかかる注意を添えた上でasync-signal-safeな関数リストに追加している。 - ^ a b “signal.h”. IEEE Std 1003.1, 2004 Edition. 2012年7月10日閲覧。
- ^ a b
signal(7)
– JM Project Linux Overview, Conventions and Miscellanea マニュアル
- 1 シグナル (Unix)とは
- 2 シグナル (Unix)の概要
- 3 シグナル送信
- 4 シグナル処理
- 5 ハードウェア例外との関係
- 6 脚注
「シグナル (Unix)」の例文・使い方・用例・文例
- 発明者は、自動車において使われる警告シグナルとして爆発的なおよび攻撃的な音の組み合わせを直観的に選んだようである
- 電気、光学式シグナル、電力を送るための導線
- 光あるいは機械的に動くアームのついた目に見えるシグナルのための装置
- キーが押されて回路が閉じられた時に電信シグナルを送信するレバーで成るキー
- 隣接するラジオ周波数のバンド(たとえばラジオまたはテレビシグナルを伝達するように割り当てられた)
- キャリア波を変えるためにそれを使用することでシグナルを伝達すること
- 彼らは、回線が悪く、バックグランドシグナルを超えてお互いをほとんど聞き取れなかった
- シグナルは、宇宙の奥地から受信された
- シグナル (Unix)のページへのリンク