UNIXやPOSIX準拠OS(Linux等)における、プロセスに対する割り込み機能のこと。
UNIX及びUNIX風のOSでは古くからある機能で、他のプロセスに対して非同期に特定の処理を行なわせたいとき、そのプロセスに対してシグナルを送信する。
プロセスはシグナルを受け取ると、決められた処理を行なう。sigaction(2)やsignal(2)システムコールによって、その動作を変更することが出来る。この時の処理を、シグナルハンドラーという。
但しその実装方法はOSによって異なっており、また同じOSであってもバージョンによって異なることもある。
シグナルには、それぞれ既定の動作方法が存在し、シグナルの処理方法を変更しない限りは、既定の処理が実行される。
- 終了 ‐ プロセス終了
- 無視 ‐ このシグナルを無視する
- コア ‐ プロセス終了とコアダンプ出力
- 停止 ‐ プロセスの一時停止
- 再開 ‐ 一時停止中のプロセスの再開
シグナルの処理は、SIGKILL と SIGSTOP を除いて変更することができる。
但し、シグナルはプロセス単位の属性である。マルチスレッドで動作していても、プロセス単位でしか設定することができない。
シグナルは、int値によるシグナル番号によって区別される。シグナル番号は環境依存であり、統一されていない。
Linuxの場合、x86版は独自の附番である。一方、alpha/sparc版はBSDに近く、mips版はSystem V(UnixWare等)に近い。
Cなどで処理を書く場合、signal.hをincludeすることでシンボル(識別子)を定義し、そのシンボルを用いる。このシンボルは、多くの環境で、おおむね一致している。
以下、BSDはFreeBSD、Linuxのx86はix86/ia64/ppc/s390/arm/sh、αはalpha/sparc、miはmipsでの値を掲示してある。
| シグナル名 | 番号 | 環境 | 動作 | 概要 |
| BSD | Linux |
| x86 | α | mi |
| SIGHUP | 1 | ? | POSIX | 終了 | ハングアップ |
| SIGINT | 2 | 2 | ANSI | 終了 | 割り込み(Ctrl+C) |
| SIGQUIT | 3 | 3 | POSIX | コア | 中止 (ASCII FS) |
| SIGILL | 4 | 4 | ANSI | コア | 不正命令(トラップされた場合、リセットされない) |
| SIGTRAP | 5 | 5 | POSIX | コア | トレース/ブレークポイント (トラップされた場合、リセットされない) |
| SIGIOT | 6 | | 4.2BSD | コア | IOT命令 |
| SIGABRT | 6 | ANSI | コア | abort()された (古いSIGIOTからの置き換え。番号は同じ) |
| SIGFPE | 8 | 8 | ANSI | コア | 浮動小数点例外、0除算例外 |
| SIGKILL | 9 | 9 | POSIX | 終了 | 強制終了 (キャッチや無視はできない) |
| SIGBUS | 10 | ? | 4.2BSD | コア | バスエラー |
| SIGSEGV | 11 | 11 | ANSI | コア | セグメンテーション侵害 |
| SIGSYS | 12 | 31 | 12 | SVR4 | コア | 無効な引数でのシステムコール |
| SIGPIPE | 13 | 13 | POSIX | 終了 | パイプ破壊(読み手のないパイプへの書き出し) |
| SIGALRM | 14 | 14 | POSIX | 終了 | アラームの時間切れ。alarm()、sleep()、usleep() |
| SIGTERM | 15 | 15 | ANSI | 終了 | kill()からの終了要求シグナル |
| SIGURG | 16 | 23 | 16 | 21 | 4.2BSD | 無視 | ソケットの緊急事態 |
| SIGSTOP | 17 | 19 | 17 | 23 | POSIX | 停止 | プロセスの一旦停止 (キャッチや無視はできない) |
| SIGTSTP | 18 | 20 | 18 | 24 | POSIX | 停止 | TTYからの一旦停止要求(Ctrl+Z) |
| SIGCONT | 19 | 18 | 19 | 25 | POSIX | 再開 | 停止されたプロセスの再開 |
| SIGCLD | ‐ | ‐ | ‐ | 18 | System V | 無視 | 子プロセスの一旦停止や終了 |
| SIGCHLD | 20 | 17 | 20 | POSIX |
| SIGTTIN | 21 | 21 | 26 | POSIX | 停止 | バックグラウンドプロセスのTTY入力 |
| SIGTTOU | 22 | 22 | 27 | POSIX | 停止 | バックグラウンドプロセスのTTY出力 |
| SIGXCPU | 24 | 24 | 30 | 4.2BSD | コア | CPUの制限時間超過 |
| SIGXFSZ | 25 | 25 | 31 | 4.2BSD | コア | 作成可能ファイルサイズ制限の超過 |
| SIGVTALRM | 26 | 26 | 28 | 4.2BSD | 終了 | 仮想アラームの時間切れ |
| SIGPROF | 27 | 27 | 29 | 4.2BSD | 終了 | プロファイリングタイマーの時間切れ |
| SIGUSR1 | 30 | 10 | 30 | 16 | POSIX | 終了 | ユーザー定義シグナル1 |
| SIGUSR2 | 31 | 12 | 31 | 17 | POSIX | 終了 | ユーザー定義シグナル2 |
| SIGPOLL | ‐ | ‐ | System V | 終了 | ポーリング可能イベントの発生 (SIGIOと同じ) |
SIGBUS/SIGXCPU/SIGXFSZは動作がコアダンプということになっているが、その状況から、失敗する可能性も高い。
| シグナル名 | 番号 | 環境 | 動作 | 概要 |
| BSD | Linux |
| x86 | α | m |
| SIGEMT | 7 | ‐ | 7 | POSIX | 終了 | EMT命令、命令実行エミュレート |
| SIGIO | 23 | 29 | 23 | 22 | 4.2BSD | 終了 | ソケット入出力が可能になった |
| SIGWINCH | 28 | 28 | 20 | 4.3BSD | 無視 | ウィンドウサイズが変化した |
| SIGINFO | 29 | ‐ | 29 | ‐ | BSD | | 情報の要求(Ctrl+T) |
| SIGPWR | ‐ | 30 | 19 | System V | 終了 | 電源障害、再起動 |
| SIGLOST | ‐ | ‐ | ‐ | Linux | |
| SIGTHR | 32 | ‐ | BSD | | スレッドの割り込み |
| SIGLWP | ‐ | BSD | | スレッドライブラリ実装用の予約 |
| SIGSTKFLT | ‐ | 16 | ‐ | ‐ | Linux | | 数値演算プロセッサーのスタックフォールト (未使用) |
| SIGUNUSED | ‐ | 31 | ‐ | ‐ | Linux | コア | 未使用のシグナル (SIGSYSと同じ) |
SIGINFO/SIGPWR/SIGLOSTは、同じ番号に別名がある。FreeBSDはSIGINFOである。Linuxのalpha/sparc版は、alphaではSIGINFO/SIGPWR、sparc版はSIGLOST、という違いがある。
この他、例えばSolarisなどでは独自のシグナルが定義されている。
プロセスの終了に関するシグナルには、次のようなものがある。OSによっては無いものもある。
関連する用語

シグナルハンドラー

errno