tail head cat sleep
QR code linking to this page

manページ  — SIGNAL

名称

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 コアイメージ作成Ta(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 機能は BSD 4.0 で現れました。

BSD 4 SIGNAL (3) April 19, 1994

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

As soon as we started programming, we found to our surprise that it wasn't as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs.
— Maurice Wilkes