signal

SIGNAL(2)                   Linux Programmer's Manual                  SIGNAL(2)



名前
       signal - ANSI C シグナル操作


書式
       #include <signal.h>


       void (*signal(int signum, void (*handler)(int)))(int);


説明
       signal システム・コールは signum で指定された番号のシグナルに 新しいシグナル・ハンドラー(signal
       hanlder)を設定する。 このシグナル・ハンドラーは handler に設定され、ユーザーの指定した関数または以下のどれかである:

              SIG_IGN
                     そのシグナルを無視(ignore)する。

              SIG_DFL
                     そのシグナルをデフォルトの動作に戻す。

       シグナル・ハンドラー・ルーチンへと渡される整数(int)引き数は シグナル番号である。これは一つのシグナル・ハンドラーを複数の
       シグナルのために使用することを可能にする。

       シグナル・ハンドラーはプロセスが関係するシグナルを受けたときにはいつで も呼び出されるルーチンである。 SIGALRM シグナルをプロセスに送る
       alarm(2) を使うとで、規則的な仕事を簡単に管理することができる。 また、プロセスは、シグナル・ハンドラーを利用することで、その設定ファイ
       ルの再読み込みの指示を受けるようなことも可能である。


返り値
       signal は今までのシグナル・ハンドラーの値を返すか、エラーの場合は SIG_ERR を返す。


注意
       SIGKILL SIGSTOP にシグナル・ハンドラーを設定することはできない。


       libc6 までは、 signal は、BSD の解釈で用いられており、デフォルトの振る舞いでは、シグナルが到
       着しても、リセットされないというものである。 SysV の解釈でりようするために、 sysv_signal を利用することもできる。

       signal sysv_signal も、共に sigaction(2) を用いて作られたライブラリ・ルーチンである。

       もし、このマニュアルの先頭の型宣言(prototype)に混乱したならば、 以下のように分離するいいかもしれない:

       typedef void (*sighandler_t)(int);
       sighandler_t signal(int signum, sighandler_t handler);

       POSIX によると、 kill(2) raise(2) 関数で生成できない SIGFPE, SIGILL, SIGSEGV
        シグナルを無視(ignore)した後の動作は未定義で ある。ゼロによる整数割り算の結果は未定義となる。
       ある種のアーキテクチャー(architecture)ではこれは SIGFPE
       シグナルを生成する。このシグナルを無視すると無限ループに落ちいるかもし れない。


準拠
       ANSI C


関連項目
       kill(1), kill(2), killpg(2), pause(2), raise(3), sigaction(2), signal(7),
       sigsetops(3), sigvec(2), alarm(2)



Linux 2.0                         21 July 1996                         SIGNAL(2)