Provided by: manpages-ja-dev_0.5.0.0.20070415-1_all bug
     前
        signal - ANSI C シグナル操作
 
     式
        #include <signal.h>
 
        typedef void (*sighandler_t)(int);
 
        sighandler_t signal(int signum, sighandler_t sighandler);
 
     明
        signal()    システム・コールは    signum   で指定された番号のシグナルに
        新しいシグナル・ハンドラーを設定する。       このシグナル・ハンドラーは
        sighandler   に設定される。   sighandler   は、ユーザーの指定した関数、
        SIG_IGN、 SIG_DFL のいずれかである。
 
        シグナル番号      signum       のシグナルを受けると次のように動作する。
        対応するハンドラーが                                            SIG_IGN
        に設定されている場合は、シグナルは無視される。   ハンドラーが   SIG_DFL
        に設定されている場合は、シグナルに関連づけられた デフォルトの動作を行う
        (signal(7)        を参照)。         ハンドラーが関数         sighandler
        に設定されている場合は、まず最初にハンドラーが  SIG_DFL  にリセットされ
        (あるいは実装に依存するシグナルのブロックが実行され)、   次に    signum
        を引た瑤箸靴 sighandler が呼ばれる。
 
        シグナルに対してシグナルハンドラー関数を使うことは、     「シグナルの-
        ャッチ」と呼ばれる。  シグナル   SIGKILL   と   SIGSTOP   はゥ礇奪舛任-
        ず、無視することもでい覆ぁ
 
         値
        signal() 関数は今までのシグナル・ハンドラーの値を返すか、エラーの場合は
        SIG_ERR を返す。
 
          
        Unix のオリジナルの signal()  はハンドラーを  SIG_DFL  にリセットする。
        System   V  (と  Linux  カーネルと  libc4,5)  も同じである。  一方、BSD
        ではハンドラーのリセットを行わず、         ハンドラーが呼ばれている間に
        シグナルの新しいインスタンスが発生するのをブロックする。         glibc2
        ライブラリでは BSD の動作に従っている。
 
        libc5    システムにおいて    <signal.h>    のかわりに    <bsd/signal.h>
        をインクルードすると、  signal()  は  __bsd_signal  に再定義されて  BSD
        方式となる。 これは推奨されない。
 
        glibc2                  システムにおいて                  _XOPEN_SOURCE
        のような機能検査マクロを定義したり、この関数とは別の        sysv_signal
        関数を使ったりすれば、以前のような動作をする。 これは推奨されない。
 
        マクロの定義やファイルのインクルードで
        この関数の方式を変更しようとするのは、良くない考え方である。   signal()
        を使うのを完全に避けて、代わりに sigaction(2) を使った方が良い。
 
     意
        マルチスレッドプロセスにおけるこの関数の結果は、指定されていない。
 
        他の場所での処理が任意の箇所で割り込まれるため、    ルーチン    handler
        は非常に注意しなければならない。                                  POSIX
        には「安全な関数」という概念がある。
        シグナルが安全でない関数に割り込み、            かつ            handler
        がその安全でない関数を呼び出していた場合、その挙動は未定義である。
        安全な関数は様々な規格に明確にリストされている。           POSIX.1-2003
        でのリストは以下の通りである:
 
        _Exit() _exit()  abort()  accept()  access()  aio_error()  aio_return()
        aio_suspend()  alarm() bind() cfgetispeed() cfgetospeed() cfsetispeed()
        cfsetospeed() chdir() chmod() chown() clock_gettime() close() connect()
        creat() dup() dup2() execle() execve() fchmod() fchown() fcntl() fdata-
        sync()  fork()  fpathconf()  fstat()  fsync()   ftruncate()   getegid()
        geteuid()  getgid()  getgroups() getpeername() getpgrp() getpid() getp-
        pid()  getsockname()  getsockopt()  getuid()  kill()  link()   listen()
        lseek()  lstat()  mkdir()  mkfifo()  open()  pathconf()  pause() pipe()
        poll() posix_trace_event() pselect() raise() read()  readlink()  recv()
        recvfrom()   recvmsg()  rename()  rmdir()  select()  sem_post()  send()
        sendmsg() sendto() setgid() setpgid()  setsid()  setsockopt()  setuid()
        shutdown()   sigaction()  sigaddset()  sigdelset()  sigemptyset()  sig-
        fillset() sigismember() signal() sigpause() sigpending()  sigprocmask()
        sigqueue()  sigset()  sigsuspend() sleep() socket() socketpair() stat()
        symlink() sysconf() tcdrain() tcflow() tcflush() tcgetattr() cgetpgrp()
        tcsendbreak()   tcsetattr()   tcsetpgrp()   time()   timer_getoverrun()
        timer_gettime()  timer_settime()  times()  umask()   uname()   unlink()
        utime() wait() waitpid() write().
 
        POSIX  によると、 kill(2)raise(3) 関数で生成でい覆 SIGFPE, SIGILL,
        SIGSEGV          シグナルを無視した後の動作は未定義である。           0
        による整数割り算の結果は未定義となる。                   ある種のアー-
        テクチャーでは、これは           SIGFPE            シグナルを生成する。
        (同様に負の最大整数を  -1  で割ると  SIGFPE が生成されるかもしれない。)
        このシグナルを無視すると無限ループに陥るかもしれない。
 
        SIGCHLD  の動作として  SIG_IGN   を設定した場合の詳細な動作については、
        sigaction(2) を参照すること。
 
        sighandler_t    の使用は   GNU   拡張である。   各種バージョンの   libc
        でこの型は定義済みである;   libc4   と   libc5    では    SignalHandler
        を定義している。   glibc   では   sig_t   を定義しており、  _GNU_SOURCE
        が定義されている場合には sighandler_t も定義されている。
 
     拠
        C89, POSIX.1-2001.
 
             
        kill(1), alarm(2), kill(2), pause(2), sigaction(2), sigpending(2), sig-
        procmask(2),  sigqueue(2),  sigsuspend(2),  killpg(3), raise(3), sigse-
        tops(3), sigvec(3), feature_test_macros(7), signal(7)