SIGNAL(3) FreeBSD ライブラリ関数マニュアル SIGNAL(3)
名称
signal − 単純化されたソフトウェアシグナル機能 |
書式
#include <signal.h> void (* |
signal(int sig, void (*func)(int)))(int); or in FreeBSD’s equivalent but easier to read typedef’d version: typedef void (*sig_t) (int) sig_t |
signal(int sig, sig_t func); |
解説 |
この signal() 機能は、もっと一般的な sigaction(2) 機能への単純化されたイ ンタフェースです。 シグナルによって、そのドメイン外のプロセスの操作が可能になり、プロセスが 自身または自身のコピー(子プロセス)を操作できます。シグナルには次の2 つの 一般的なタイプがあります。プロセスを終了させるもの、およびそうではないも のです。プログラムの終了を発生させるシグナルは、回復不可能なエラーの結果 であることもありますし、「割り込み」キャラクタを入力する端末のユーザの結 果であることもあります。シグナルが使用されるのは、プロセスが停止されたと きです。バックグラウンドにありながら制御端末にアクセスする必要があるから です ( tty(4) を参照 ) 。シグナルがオプションで生成されるのは、プロセスが 停止された後、再開されるとき、子プロセスのステータスが変化したとき、また は入力が制御端末で準備ができているときです。処置が行われない場合、ほとん どのシグナルはシグナルを受け取るプロセスの終了という結果になります。シグ ナルによっては、代わりにプロセスがシグナルを受け取ってから停止させるもの もありますし、プロセスが別の要求をされていない場合は単に廃棄されるものも あります。 SIGKILL シグナルと SIGSTOP シグナルを除いて、 signal() 関数 は、シグナルを捕捉、無視、または割り込み生成できるようにします。これらの シグナルはファイル 〈signal.h〉 に定義されています。 名前 デフォルト処置 説明 sig パラメータはどのシグナルが受信されたかを指定します。 func プロシー ジャは、ユーザがシグナル受信時に処置を選択できるようにします。上記にリス トしたように発生するようシグナルのデフォルト処置を設定するには、 func は SIG_DFL である必要があります。 SIG_DFL は、デフォルトの処置をリセットしま す。シグナルを無視するためには、 func は SIG_IGN にする必要があります。こ れによって、後続のシグナルのインスタンスが無視され、中断中のインスタンス が廃棄されます。 SIG_IGN が使用されない場合は、それ以上に発生したシグナル は自動的にブロックされ、 func が呼び出されます。 取り扱われるシグナルは、関数が戻るときにはブロックされず、シグナルが発生 したときにプロセスは中断したところから継続します。 以前のシグナル機能と 違って、ハンドラ func() はシグナルが配信された後もインストールされたまま になります。 システムコールによっては、呼び出しが実行中にシグナルが捕捉され、呼び出し が完了前に終了された場合、呼び出しが自動的に再開されます (ハンドラは sigaction(2) で SA_RESTART フラグを使用してインストールされます)。影響を 受けるシステムコールには、通信チャネル上または低速デバイス上および ioctl(2) または wait(2) の間の、 read(2), write(2), sendto(2), recvfrom(2), sendmsg(2), および recvmsg(2) が含まれます。しかし、既にコ ミット済みの呼び出しは再開始されず、代わりに部分的な処理成功が返されます ( たとえば、短い読み取りカウント )。 シグナルハンドラをインストールしたプロセスがフォークすると、子プロセスは シグナルを継承します。捕捉されたすべてのシグナルが、 execve(2) 関数の呼び 出しによって、デフォルトの処置にリセットされます。無視されたシグナルは無 視されたままになります。 |
戻り値
呼び出しが成功すると、直前の処置が返されます。そうでない場合、SIG_ERR が 返され、グローバル変数 errno が設定されてエラーを示します。 |
エラー
signal() は次のうちの 1 つが発生すると処理失敗し、処置は取られません。 |
[EINVAL]
Sig は有効なシグナル番号ではありません。 [EINVAL] 関連項目 |
kill(1), kill(2), ptrace(2), sigaction(2), sigaltstack(2), sigprocmask(2), sigsuspend(2), fpsetmask(3), setjmp(3), tty(4) |
歴史
この signal 機能は 4.0BSD で現れました。 4th Berkeley Distribution April 19, 1994 4th Berkeley Distribution |