シグナル (イベント)

読み:シグナル
外語: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によっては無いものもある。

  • SIGNULL ヌル ‐ pidへのアクセスのチェック
  • SIGHUP ハングアップ ‐ 終了、トラップ可能
  • SIGINT 割り込み ‐ 終了、トラップ可能
  • SIGQUIT 停止 ‐ コアダンプして終了、トラップ可能
  • SIGKILL 強制終了 ‐ 強制終了、トラップ不可能
  • SIGTERM 終了 ‐ 終了、トラップ可能
  • SIGSTOP ストップ ‐ プロセスの休止、トラップ不可能
  • SIGTSTP ターミナルストップ ‐ プロセスの休止、トラップ可能
  • SIGCONT 継続 ‐ ストップしたプロセスの再開
関連する用語
シグナルハンドラー
errno

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club