スポンサーリンク

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⟩ に定義されています。

名前 デフォルト処置 説明
SIGHUP プロセスの終了 端末ラインのハングアップ
SIGINT プロセスの終了 プログラムに割り込む
SIGQUIT コアイメージ作成 プログラムを終了する
SIGILL コアイメージ作成 不正命令
SIGTRAP コアイメージ作成 トラップを追跡する
SIGABRT コアイメージ作成 abort(2) 呼び出し ( 以前は SIGIOT)
SIGEMT コアイメージ作成 エミュレート命令が実行される
SIGFPE コアイメージ作成 浮動小数点例外
SIGKILL プロセスの終了 プログラムを抹消する
SIGBUS コアイメージ作成 バスエラー
SIGSEGV コアイメージ作成 セグメント化侵犯
SIGSYS コアイメージ作成 不存在のシステムコールを呼び出す
SIGPIPE プロセスの終了 リーダ(reader)のないパイプに書き 込む
SIGALRM プロセスの終了 リアルタイマが時間切れ
SIGTERM プロセスの終了 ソフトウェア終了シグナル
SIGURG シグナルを廃棄 ソケット上に存在する緊急状況
SIGSTOP プロセスの停止 停止する(捕捉または無視できない)
SIGTSTP プロセスの停止 キーボードから生成されたシグナル を停止する
SIGCONT シグナルを廃棄 停止の後も継続する
SIGCHLD シグナルを廃棄 子ステータスが変化した
SIGTTIN プロセス停止 制御端末から試みられたバックグラ ウンド読み取り
SIGTTOU プロセス停止 制御端末について試みられたバック グラウンド書き込み
SIGIO シグナルを廃棄 記述子上で入出力が可能 ( fcntl(2) を参照)
SIGXCPU プロセスの終了 プロセス cpu 時間制限を超過 ( setrlimit(2) を参照)
SIGXFSZ プロセスの終了 ファイルサイズ制限を超過 ( setrlimit(2) を参照)
SIGVTALRM プロセスの終了 仮想時間アラーム ( setitimer(2) を参照)
SIGPROF プロセスの終了 プロファイル化タイマアラーム ( setitimer(2) を参照)
SIGWINCH シグナルを廃棄 ウィンドウサイズの変化
SIGINFO シグナルを廃棄 キーボードからのステータス要求
SIGUSR1 プロセスの終了 ユーザ定義シグナル 1
SIGUSR2 プロセスの終了 ユーザ定義シグナル 2

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]
SIGKILL または SIGSTOP についてのハンドラを無視または指定しよう とする試みが行われます。

関連項目

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

スポンサーリンク