Rechercher une page de manuel
signal
Langue: ja
Version: 2000-04-28 (mandriva - 01/05/08)
Section: 2 (Appels système)
名前
signal - ANSI C シグナル操作書式
#include <signal.h>typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t sighandler);
説明
signal() システム・コールは signum で指定された番号のシグナルに 新しいシグナル・ハンドラーを設定する。 このシグナル・ハンドラーは handler に設定される。 handler は、ユーザーの指定した関数、 SIG_IGN、 SIG_DFL のいずれかである。シグナル番号 signum のシグナルを受けると次のように動作する。 対応するハンドラーが SIG_IGN に設定されている場合は、シグナルは無視される。 ハンドラーが SIG_DFL に設定されている場合は、シグナルに関連づけられた デフォルトの動作を行う (signal(7) を参照)。 ハンドラーが関数 handler に設定されている場合は、まず最初にハンドラーが SIG_DFL にリセットされ (あるいは実装に依存するシグナルのブロックが実行され)、 次に signum を引き数として handler が呼ばれる。
シグナルに対してシグナルハンドラー関数を使うことは、 「シグナルのキャッチ」と呼ばれる。 シグナル SIGKILL と SIGSTOP はキャッチできず、無視することもできない。
返り値
signal() 関数は今までのシグナル・ハンドラーの値を返すか、エラーの場合は SIG_ERR を返す。準拠
C89, C99, POSIX.1-2001.注意
マルチスレッドプロセスにおけるこの関数の結果は、指定されていない。POSIX によると、 kill(2) や raise(3) 関数で生成できない SIGFPE, SIGILL, SIGSEGV シグナルを無視した後の動作は未定義である。 0 による整数割り算の結果は未定義となる。 ある種のアーキテクチャーでは、これは SIGFPE シグナルを生成する。 (同様に負の最大整数を -1 で割ると SIGFPE が生成されるかもしれない。) このシグナルを無視すると無限ループに陥るかもしれない。
SIGCHLD の動作として SIG_IGN を設定した場合の詳細な動作については、 sigaction(2) を参照すること。
シグナルハンドラ内から安全に呼び出すことができる、 async-signal-safe functions (非同期シングルで安全な関数) の リストについては signal(7) を参照。
sighandler_t の使用は GNU 拡張である。 各種バージョンの libc でこの型は定義済みである; libc4 と libc5 では SignalHandler を定義している。 glibc では sig_t を定義しており、 _GNU_SOURCE が定義されている場合には sighandler_t も定義されている。
移植性
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) を使った方が良い。
関連項目
kill(1), alarm(2), kill(2), pause(2), sigaction(2), sigpending(2), sigprocmask(2), sigqueue(2), sigsuspend(2), bsd_signal(3), killpg(3), raise(3), sigsetops(3), sigvec(3), sysv_signal(3), feature_test_macros(7), signal(7)Contenus ©2006-2023 Benjamin Poulain
Design ©2006-2023 Maxime Vantorre