Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ signal(3C) — NEWS-os 3.3

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

kill(1)

ptrace(2)

kill(2)

sigvec(2)

sigblock(2)

sigsetmask(2)

sigpause(2)

sigstack(2)

setjmp(3)

tty(4)

SIGNAL(3C)  —  UNIX Programmer’s Manual

名称

signal − 簡素化されたソフトウェアシグナル機構

形式

#include <signal.h>

(∗signal(sig, func))()
int (∗func)();

解説

signal は、より一般的な sigvec(2) の機能に対し、 簡素化されたインタフェースです。

端末のユーザによって起こされたある異常な事象(中止、割り込み、中断)によって、 またプログラムのエラー(バスエラーほか)によって、 またあるいは他のプログラムの要求(kill)によって、 またさらにバックグラウンドでの処理中にプロセスが制御端末を アクセスしようとしたために中断された場合 (tty(4) 参照)に、 シグナルが発生します。 また、プロセス中断後に再実行した時や、 子プロセスのステータスが変化した時、 制御端末から入力が行われた時、 随時シグナルが発生します。 ほとんどのシグナルは、 何も処理がなされなければ、 受信プロセスを終了させます。 あるシグナルは、 それを受信したプロセスを中断させるか、 あるいはプロセスが他に要求しなかったならば、 それはたんに無視されます。 SIGKILL 及び SIGSTOP シグナル以外については、 signal の呼び出しにより、シグナルが無視されるようにするか、 あるいはシグナルが指定位置で割り込みを生ずるようにするかの、 どちらかが可能です。 インクルードファイル  <signal.h> で定義される名前とともに、 すべてのシグナルのリストを次に示します。

SIGHUP1ハングアップ
SIGINT2割り込み
SIGQUIT3∗中止
SIGILL4∗不法な命令
SIGTRAP5∗トレーストラップ
SIGIOT6∗IOT命令
SIGEMT7∗EMT命令
SIGFPE8∗浮動小数点の例外
SIGKILL9強制終了(捕獲することも無視することもできない)
SIGBUS10∗バスエラー
SIGSEGV11∗セグメンテーション違反
SIGSYS12∗システムコールに対する無効な引数
SIGPIPE13読み取りが行われていないパイプへ書き込んだ
SIGALARM14アラームクロック
SIGTERM5ソフトウェア終了シグナル
SIGURG16•ソケット上に緊急事態が存在する
SIGSTOP17†中断(捕獲することも無視することもできない)
SIGTSTP18†キーボードから発生した中断シグナル
SIGCONT19•中断後の継続
SIGCHLD20•子プロセスのステータスが変化した
SIGTTIN21†制御端末からバックグラウンド入力がされた
SIGTTOU22†制御端末からバックグラウンド出力がされた
SIGIO23•ディスクリプタ上での入出力が可能(fcntl(2)参照)
SIGXCPU24CPUタイムの限界を超過した(setrlimit(2)参照)
SIGXFSZ25ファイルサイズの限界を超過した(setrlimit(2)参照)
SIGVTALRM26仮想タイムアラーム(setitimer(2)参照)
SIGPROF27プロファイリングタイムアラーム(setitimer(2)参照)
SIGWINCH28•   ウィンドウサイズの変更
SIGUSR130ユーザ定義シグナル1
SIGUSR231ユーザ定義シグナル2

上記のリストで ∗ 印を付けたシグナルは、 捕獲することも無視することもしない場合、 コアイメージを生じます。

func が SIG_DFL のとき、 シグナル sig に対するデフォルト処理が復元されます。 ここでデフォルト処理とは、 • 印または † 印の付けられているシグナル以外のシグナルでは終了 (∗ 印の付けられているシグナルではコアイメージが生じる)です。 • 印を付けられているシグナルは、 処理が SIG_DFL である場合には捨てられます。 † の付けられているシグナルは、 プロセスを停止させます。 func が SIG_IGN のとき、 シグナルは続けて無視され、 シグナルのペンディング状態は放棄されます。 そうでなければ、 シグナルが発生すると、 それ以降に発生するシグナルは自動的にブロックされ、 func が呼び出されます。

関数からの戻り処理は、 処理されるシグナルをブロックせず、 割り込まれた位置からプロセスを続行します。 以前のシグナル機構と違い、 シグナルが送信された後も、 ハンドラ func は当初設定されたままです。

受信シグナルがあるシステムコールの最中に生じた場合、 そのシステムコールは速やかに終了させられ、 そのシステムコールは自動的に再スタートされます。 特に、 これは、 wait(2) の最中と、 低速デバイス(端末などで、 ファイルではありません)での read あるいは write(2) の最中に生じる可能性があります。

signal の値は、 各シグナルに対する以前の(または最初の) func の値です。

fork(2) あるいは vfork(2) の後では、 子は全てのシグナルを受け継ぎます。 execve(2) は、すべての受信シグナルをデフォルト処理に設定しなおします。 また、 無視されたシグナルは、 そのまま無視されます。

リターン値

正常終了すると、 以前の動作が返されます。 そうでなければ、−1 が返され、 エラーを示すために errno がセットされます。

エラー

次のうちどれかが生じた場合、 signal は失敗し、 いかなる動作も起こりません。

[EINVAL] sig が有効なシグナル番号でない。

[EINVAL] SIGKILL または SIGSTOP に対するハンドラを無視するか、 あるいは捕獲するような試行がなされた。

[EINVAL] SIGCONT を無視するような試行がなされた(デフォルトでは SIGCONT は無視される)。

関連事項

kill(1), ptrace(2), kill(2), sigvec(2), sigblock(2), sigsetmask(2), sigpause(2), sigstack(2), setjmp(3), tty(4)

注記(NEWS)

ハンドラルーチンは次のように宣言することが可能です。

    handler(sig, code, scp)
    int sig,code;
    struct sigcontext ∗scp;

ここで sig はシグナル番号で、 この番号には、 以下で定義されるように、 ハードウェアのエラー及びトラップがマップされています。 code はパラメータで、 以下に示される定数です。 scp は struct sigcontext を指すポインタで、 シグナル発生前のプロセスの内容を復元するために、 システムによって使われるものです。 (<signal.h>) の中で定義されています。)

次に、 シグナル及びコードに対するハードウェアトラップのマッピングの定義を示します。 これらのシンボルはすべて、 <signal.h> で定義されています。

   ハードウェア状態シグナル      コード
 算術トラップ:
   整数値オーバーフローSIGFPE     FPE_INTOVF_TRAP
   整数のゼロによる除算SIGFPE     FPE_INTDIV_TRAP
   浮動小数オーバーフロートラップSIGFPE     FPE_FLTOVF_TRAP
   浮動小数及び10進数のゼロによる除算SIGFPE     FPE_FLTDIV_TRAP
   浮動小数アンダーフロートラップSIGFPE      FPE_FLTUND_TRAP
   10進数のオーバーフロートラップSIGFPE     FPE_DECOVF_TRAP
   添字の範囲違反SIGFPE     FPE_SUBRNG_TRAP
   浮動小数オーバーフローエラーSIGFPE     FPE_FLTOVF_FAULT
   浮動小数のゼロによる除算エラーSIGFPE     FPE_FLTDIV_FAULT
   浮動小数のアンダーフローエラーSIGFPE     FPE_FLTUND_FAULT
予約のアドレッシング不当アクセスSIGILL     ILL_RESAD_FAULT
特権命令不当使用SIGILL     ILL-PRIVIN-FAULT
予約オペランド不当使用SIGILL     ILL-RESOP-FAULT

NEWS-OSRelease 3.3

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026