シグナル (イベント)
読み:シグナル
外語:signal

 UNIXPOSIX準拠OS(Linux等)における、プロセスに対する割り込み機能のこと。
目次

概要
 UNIX及びUNIX風のOSでは古くからある機能で、他のプロセスに対して非同期に特定の処理を行なわせたいとき、そのプロセスに対してシグナルを送信する。
 プロセスはシグナルを受け取ると、決められた処理を行なう。sigaction(2)やsignal(2)システムコールによって、その動作を変更することが出来る。この時の処理を、シグナルハンドラーという。
 但しその実装方法はOSによって異なっており、また同じOSであってもバージョンによって異なることもある。

特徴

動作
 シグナルには、それぞれ既定の動作方法が存在し、シグナルの処理方法を変更しない限りは、既定の処理が実行される。

プロセス
 シグナルの処理は、SIGKILLSIGSTOP を除いて変更することができる。
 但し、シグナルはプロセス単位の属性である。マルチスレッドで動作していても、プロセス単位でしか設定することができない。

番号
 シグナルは、int値によるシグナル番号によって区別される。シグナル番号は環境依存であり、統一されていない。
 Linuxの場合、x86版は独自の附番である。一方、alpha/sparc版はBSDに近く、mips版はSystem V(UnixWare等)に近い。
 Cなどで処理を書く場合、signal.hをincludeすることでシンボル(識別子)を定義し、そのシンボルを用いる。このシンボルは、多くの環境で、おおむね一致している。

種類
 以下、BSDはFreeBSDLinuxのx86はix86/ia64/ppc/s390/arm/sh、αはalpha/sparc、miはmipsでの値を掲示してある。

POSIX.1-2001
シグナル名番号環境動作概要
BSDLinux
x86αmi
SIGHUP1?POSIX終了ハングアップ
SIGINT22ANSI終了割り込み(Ctrl+C)
SIGQUIT33POSIXコア中止 (ASCII FS)
SIGILL44ANSIコア不正命令(トラップされた場合、リセットされない)
SIGTRAP55POSIXコアトレース/ブレークポイント (トラップされた場合、リセットされない)
SIGIOT6 4.2BSDコアIOT命令
SIGABRT6ANSIコアabort()された (古いSIGIOTからの置き換え。番号は同じ)
SIGFPE88ANSIコア浮動小数点例外、0除算例外
SIGKILL99POSIX終了強制終了 (キャッチや無視はできない)
SIGBUS10?4.2BSDコアバスエラー
SIGSEGV1111ANSIコアセグメンテーション侵害
SIGSYS123112SVR4コア無効な引数でのシステムコール
SIGPIPE1313POSIX終了パイプ破壊(読み手のないパイプへの書き出し)
SIGALRM1414POSIX終了アラームの時間切れ。alarm()、sleep()、usleep()
SIGTERM1515ANSI終了kill()からの終了要求シグナル
SIGURG162316214.2BSD無視ソケットの緊急事態
SIGSTOP17191723POSIX停止プロセスの一旦停止 (キャッチや無視はできない)
SIGTSTP18201824POSIX停止TTYからの一旦停止要求(Ctrl+Z)
SIGCONT19181925POSIX再開停止されたプロセスの再開
SIGCLD18System V無視子プロセスの一旦停止や終了
SIGCHLD201720POSIX
SIGTTIN212126POSIX停止バックグラウンドプロセスのTTY入力
SIGTTOU222227POSIX停止バックグラウンドプロセスのTTY出力
SIGXCPU2424304.2BSDコアCPUの制限時間超過
SIGXFSZ2525314.2BSDコア作成可能ファイルサイズ制限の超過
SIGVTALRM2626284.2BSD終了仮想アラームの時間切れ
SIGPROF2727294.2BSD終了プロファイリングタイマーの時間切れ
SIGUSR130103016POSIX終了ユーザー定義シグナル1
SIGUSR231123117POSIX終了ユーザー定義シグナル2
SIGPOLLSystem V終了ポーリング可能イベントの発生 (SIGIOと同じ)
 SIGBUS/SIGXCPU/SIGXFSZは動作がコアダンプということになっているが、その状況から、失敗する可能性も高い。

その他
シグナル名番号環境動作概要
BSDLinux
x86αm
SIGEMT77POSIX終了EMT命令、命令実行エミュレート
SIGIO232923224.2BSD終了ソケット入出力が可能になった
SIGWINCH2828204.3BSD無視ウィンドウサイズが変化した
SIGINFO2929BSD 情報の要求(Ctrl+T)
SIGPWR3019System V終了電源障害、再起動
SIGLOSTLinux 
SIGTHR32BSD スレッドの割り込み
SIGLWPBSD スレッドライブラリ実装用の予約
SIGSTKFLT16Linux 数値演算プロセッサーのスタックフォールト (未使用)
SIGUNUSED31Linuxコア未使用のシグナル (SIGSYSと同じ)
 SIGINFO/SIGPWR/SIGLOSTは、同じ番号に別名がある。FreeBSDはSIGINFOである。Linuxのalpha/sparc版は、alphaではSIGINFO/SIGPWR、sparc版はSIGLOST、という違いがある。
 この他、例えばSolarisなどでは独自のシグナルが定義されている。

終了関係
 プロセスの終了に関するシグナルには、次のようなものがある。OSによっては無いものもある。

再検索