FreeBSD 日本語マニュアル検索 (jman/japropos/jwhatis)


日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。

4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)

13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。



検索コマンド: man apropos whatis
コマンド/キーワード:
日本語マニュアル RELEASE :
セクション:
Table of Contents
名称 | ライブラリ | 書式 | 解説 | | 戻り値 | 使用例 | エラー | 関連項目 | 規格
SIGACTION(2)           FreeBSD システムコールマニュアル           SIGACTION(2)

名称
     sigaction -- ソフトウェアシグナル機能

ライブラリ
     標準 C ライブラリ (libc, -lc)

書式
     #include <signal.h>

     struct  sigaction {
             void    (*sa_handler)(int);
             void    (*sa_sigaction)(int, siginfo_t *, void *);
             int     sa_flags;               /* 下記のシグナルオプション参照 */
             sigset_t sa_mask;               /* 適用するシグナルマスク */
     };

     int
     sigaction(int sig, const struct sigaction * restrict act,
         struct sigaction * restrict oact);

解説
     システムは、プロセスに配信される 1 組のシグナルを定義しています。シグナル
     の配信は、ハードウェア割り込みの発生に似ています: シグナルは、通常、さら
     なる発生はブロックされ、現在のスレッドのコンテキストは、保存され、新しい
     ものが、構築されます。プロセスは、シグナルが配信される handler (ハンドラ)
     を指定するか、またはシグナルが無視されることを指定します。また、プロセス
     は、デフォルトのアクションがシグナルが発生するとき、システムによって取ら
     れることを指定します。また、シグナルは、スレッドのためにブロックされ、そ
     の場合に、ブロックが解除されるまで、そのスレッドに配信されません。配信で
     取られるアクションは、配信のときに決定されます。通常、シグナルハンドラ
     は、スレッドの現在のスタックで実行します。これは、ハンドラ単位で、変更さ
     れ、その結果、シグナルは、特別のシグナルスタックに取られます。

     通常、シグナルルーチンは、ブロックされた、それらの呼び出しを引き起こした
     シグナルで実行しますが、他のシグナルは、まだ起こります。グローバルなシグ
     ナルマスクは、スレッドへの配信から現在ブロックされているシグナルのセット
     を定義します。スレッドのためのシグナルマスクは、その親 (通常、空) のシグ
     ナルマスクから初期化されます。それは、sigprocmask(2) または
     pthread_sigmask(3) 呼び出しか、またはシグナルがスレッドに配信されるとき、
     変更されます。

     シグナル状態がプロセスまたはスレッドのために発生するとき、シグナルは、プ
     ロセスまたはスレッドのための保留中のシグナルのセットに追加されます。シグ
     ナルが、一般的にプロセス、または特定のスレッドに向けられるかどうかは、そ
     れが、どのように生成されるかに依存します。特定のスレッドに向けられたシグ
     ナルに関して、シグナルが、スレッドによって現在グロックされていないなら、
     それは、スレッドに配信されます。プロセス向けられたシグナルに関して、シグ
     ナルが、すべてのスレッドによって、現在グロックされていないなら、(その選択
     が、指定されていない) ブロックされていない 1 つのスレッドに配信されます。
     シグナルは、スレッドがオペレーティングシステムに入るときはいつでも (例え
     ば、システムコール、ページフォルトまたはトラップ、またはクロック割り込み
     の間に) 配信されます。複数のシグナルが同時に配信される準備ができているな
     ら、トラップによって起こされるあらゆるシグナルは、最初に配信されます。追
     加のシグナルは、それらの最初の命令の前に、以前のシグナルのためのハンドラ
     を割り込むように現れるたびに同時に処理されます。保留中のシグナルの集合
     は、sigpending(2) システムコールによって返されます。捕獲されたシグナルが
     配信されるとき、スレッドの現状が状態は、保存され、新しいシグナルマスク
     は、(以下に説明されるように) 計算され、シグナルハンドラが、呼び出されま
     す。ハンドラへの呼び出しは、シグナルの処理ルーチンが正常に返るなら、ス
     レッドが、シグナルの配信の前に、コンテキストで実行を再開できるように、手
     配されます。スレッドが、異なるコンテキストで再開することを望むなら、それ
     は、前のコンテキスト自体を復元するように手配しなければなりません。

     シグナルがスレッドに配信されるとき、新しいシグナルマスクは、プロセスのシ
     グナルハンドラの存続期間に (または、sigprocmask(2) システムコールが行われ
     るまで) 保持されます。このマスクは、現在のシグナルマスクの集合、配信され
     るシグナル、と呼び出されるハンドラに関連付けられたシグナルマスクの和集合
     (union) を取ることによって形成されます。

     sigaction() システムコールは、sig によって指定されたシグナルのためのアク
     ションに割り当てられます。act が 0 でないなら、アクション (SIG_DFL,
     SIG_IGN、またはハンドラルーチン) と指定されたシグナルを配信するとき使用さ
     れるマスクを指定します。oact が 0 でないなら、シグナルのために以前に扱わ
     れた情報が、ユーザに返されます。

     struct sigaction の上記の宣言は、リテラルではありません。それは、アクセス
     可能なメンバをリストするためだけに提供されます。実際の定義については、
     <sys/signal.h> を参照してください。特に、sa_handler と sa_sigaction に
     よって占領された記憶域は、オーバラップし、アプリケーションは、同時に両方
     を使用することはできません。

     いったんシグナルハンドラが設置されると、それは、別の sigaction() システム
     コールが行われるか、または execve(2) が実行されるまで、通常、設置され続け
     られます。シグナル特有のデフォルトのアクションは、sa_handler から SIG_DFL
     まで設定することによってリセットされます。デフォルトは、たぶん、コアダン
     プで、プロセスの終了、アクションなし、プロセスを停止する、または、プロセ
     スを継続するです。シグナルのデフォルトのアクションごとに以下のシグナルの
     リストを参照してください。sa_handler が SIG_DFL であるなら、シグナルのた
     めのデフォルトのアクションは、シグナルを破棄することであり、シグナルが保
     留中であるなら、たとえシグナルがマスクされても、保留中のシグナルは、破棄
     されます。sa_handler が SIG_IGN に設定されているなら、シグナルの現在と保
     留中のインスタンスは、無視され、破棄されます。

     オプションは、sa_flags を設定することによって指定されます。様々なビットの
     意味は、次の通りです:

           SA_NOCLDSTOP    SIGCHLD シグナルのための捕獲関数を設置するとき、こ
                           のビットが設定されるなら、SIGCHLD シグナルは、子プ
                           ロセスが停止するときではなく、子プロセスが終了する
                           ときのみ生成されます。

           SA_NOCLDWAIT    SIGCHLD シグナルのために sigaction() を呼び出すと
                           き、このビットが設定されるなら、システムは、呼び出
                           しているプロセスの子プロセスが終了するとき、ゾンビ
                           プロセスを作成しません。その後の呼び出しているプロ
                           セスが wait(2) (または同等なもの) を発行するなら、
                           それは、呼び出しているプロセスの子プロセスののすべ
                           てが終了するまで、ブロックし、次に、errno を ECHILD
                           に設定して、-1 の値で返ります。また、SIGCHLD のため
                           の sa_handler を SIG_IGN に設定することによって、ゾ
                           ンビの作成を回避するのと同じ効果を達成することがで
                           きます。

           SA_ONSTACK      このビットが設定されているなら、システムは、
                           sigaltstack(2) がある各スレッドによって指定されるシ
                           グナルスタックのプロセスにシグナルを配信します。

           SA_NODEFER      このビットが設定されているなら、配信されるシグナル
                           のさらなる発生は、ハンドラの実行の間にマスクされま
                           せん。

           SA_RESETHAND    このビットが設定されるなら、ハンドラは、シグナルが
                           配信される瞬間に、元の SIG_DFL にリセットされます。

           SA_RESTART      以下の段落を参照してください。

           SA_SIGINFO      このビットが設定されるなら、ハンドラ関数は、struct
                           sigactionsa_sigaction メンバによって指されると
                           仮定され、上記に表示されたプロトタイプまたは下記の
                           「使用例」のように一致するべきです。このビットは、
                           SIG_DFL または SIG_IGN を割り当てるとき、設定される
                           べきではありません。

     シグナルが以下にリストされたシステムコールの間に捕獲されるなら、呼び出し
     が、強制的にエラー EINTR で終了されるか、呼び出しが、要求されるより短い
     データ転送で返るか、または、呼び出しが、再開されます。保留中の呼び出しの
     再開は、sa_flags の SA_RESTART ビットを設定することによって要求されます。
     影響を受けるシステムコールは、通信チャネルまたは (通常ファイルではなく端
     末のような) 遅いデバイスと wait(2) または ioctl(2) の間で open(2),
     read(2), write(2), sendto(2), recvfrom(2), sendmsg(2)recvmsg(2) を含
     んでいます。しかしながら、既にコミットされた呼び出しは、再開されません
     が、代りに、部分的な成功 (例えば、短い読み込みカウント) を返します。

     pthread_create(3) の後に、シグナルマスクは、新しいスレッドと保留中のシグ
     ナルのセットによって継承され、新しいスレッドのためのシグナルスタックは、
     空です。

     fork(2) または vfork(2) の後に、すべてのシグナル、シグナルマスク、シグナ
     ルスタックと再開/割り込みフラグは、子プロセスによって継承されます。

     execve(2) システムコールは、捕獲されたすべてのシグナルのためのデフォルト
     のアクションを元に戻し、ユーザスタックで捕獲されるすべてのシグナルをリ
     セットします。無視されたシグナルは、無視され続けます。シグナルマスクは、
     同じであり続けます。保留中のシステムコールを再開するシグナルは、そうし続
     けます。

     次は、インクルードファイル <signal.h> にある名前ですべてのシグナルのリス
     トです:

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


     act で指定された sa_mask フィールドは、SIGKILL または SIGSTOP をブロック
     することを許可しません。そうする、あらゆる試みは、静かに無視されます。

     次の関数は、リエントラントか、またシグナルによって割り込み可能ではなく、
     非同期シグナルにセーフです。したがって、アプリケーションは、マルチスレッ
     ド化されたプロセスで fork(2) を呼び出した後に、シグナル捕獲関数から、また
     は子プロセスから、制限なしで、それらを呼び出すことができます:

     基本インタフェース:

     _Exit(), _exit(), accept(), access(), alarm(), bind(), cfgetispeed(),
     cfgetospeed(), cfsetispeed(), cfsetospeed(), chdir(), chmod(), chown(),
     close(), connect(), creat(), dup(), dup2(), execl(), execle(), execv(),
     execve(), faccessat(), fchdir(), fchmod(), fchmodat(), fchown(),
     fchownat(), fcntl(), fork(), fstat(), fstatat(), fsync(), ftruncate(),
     getegid(), geteuid(), getgid(), getgroups(), getpeername(), getpgrp(),
     getpid(), getppid(), getsockname(), getsockopt(), getuid(), kill(),
     link(), linkat(), listen(), lseek(), lstat(), mkdir(), mkdirat(),
     mkfifo(), mkfifoat(), mknod(), mknodat(), open(), openat(), pause(),
     pipe(), poll(), pselect(), pthread_sigmask(), raise(), read(),
     readlink(), readlinkat(), recv(), recvfrom(), recvmsg(), rename(),
     renameat(), rmdir(), select(), send(), sendmsg(), sendto(), setgid(),
     setpgid(), setsid(), setsockopt(), setuid(), shutdown(), sigaction(),
     sigaddset(), sigdelset(), sigemptyset(), sigfillset(), sigismember(),
     signal(), sigpending(), sigprocmask(), sigsuspend(), sleep(),
     sockatmark(), socket(), socketpair(), stat(), symlink(), symlinkat(),
     tcdrain(), tcflow(), tcflush(), tcgetattr(), tcgetpgrp(), tcsendbreak(),
     tcsetattr(), tcsetpgrp(), time(), times(), umask(), uname(), unlink(),
     unlinkat(), utime(), wait(), waitpid(), write()。

     X/Open システムインタフェース:

     sigpause(), sigset(), utimes()。

     リアルタイムインタフェース:

     aio_error(), clock_gettime(), timer_getoverrun(), aio_return(),
     fdatasync(), sigqueue(), timer_gettime(), aio_suspend(), sem_post(),
     timer_settime()。

     POSIX によって非同期シグナルにセーフとして指定されない基本的なインタ
     フェース:

     fpathconf(), pathconf(), sysconf()。

     POSIX によって非同期シグナルにセーフとして指定されない基本的なインタ
     フェースですが、予定されています:

     ffs(), htonl(), htons(), memccpy(), memchr(), memcmp(), memcpy(),
     memmove(), memset(), ntohl(), ntohs(), stpcpy(), stpncpy(), strcat(),
     strchr(), strcmp(), strcpy(), strcspn(), strlen(), strncat(), strncmp(),
     strncpy(), strnlen(), strpbrk(), strrchr(), strspn(), strstr(),
     strtok_r(), wcpcpy(), wcpncpy(), wcscat(), wcschr(), wcscmp(), wcscpy(),
     wcscspn(), wcslen(), wcsncat(), wcsncmp(), wcsncpy(), wcsnlen(),
     wcspbrk(), wcsrchr(), wcsspn(), wcsstr(), wcstok(), wmemchr(), wmemcmp(),
     wmemcpy(), wmemmove(), wmemset()。

     拡張インタフェース:

     accept4(), bindat(), closefrom(), connectat(), eaccess(), ffsl(),
     ffsll(), flock(), fls(), flsl(), flsll(), futimesat(), pipe2(),
     strlcat().  strlcpy(), strsep()。

     加えて、errno を読み込むか、または書き込むことは、非同期シグナルにセーフ
     です。

     上記にリストされないすべての関数は、シグナルに関して安全 (セーフ) でない
     と見なされています。すなわち、そのような関数の振る舞いは、それらが安全で
     ない関数を割り込むシグナルハンドラから呼び出されるとき、未定義です。しか
     しながら、一般的に、シグナルハンドラは、フラグを設定するだけを行うべきで
     す。その他のアクションは、安全ではありません。

     また、グローバル変数 errno のコピーを作り、シグナルハンドラから返る前に、
     それを復旧することはよいことです。これは、シグナルハンドラの内部から呼び
     出される関数によって設定されている errno の副作用から保護します。

戻り値
     関数 sigaction() は、処理が成功すると値 0 を返します。そうでない場合、値
     -1 が返され、グローバル変数 errno にエラーを示す値が設定されます。

使用例
     ハンドラが一致する 3 つの指定できるプロトタイプがあります:

           ANSI C:
                  void handler(int);

           伝統的な BSD スタイル:
                  void handler(int, int code, struct sigcontext *scp);

           POSIX の SA_SIGINFO:
                  void handler(int, siginfo_t *info, ucontext_t *uap);

     ハンドラ関数は、SA_SIGINFO ビットが sa_flags に設定されているなら、
     SA_SIGINFO プロトタイプと一致するべきです。次に、それは、struct sigactionsa_sigaction メンバによって指されるべきです。利用者は、この方法で
     SIG_DFL または SIG_IGN を割り当てるべきではないことに注意してください。

     SA_SIGINFO フラグが設定されないなら、ハンドラ関数は、ANSI C または伝統的
     な BSD プロトタイプのいずれかと一致すべきで、struct sigactionsa_handler メンバによって指されるべきです。実際には、FreeBSD は、常に後者
     の 3 つの引数を送り、ANSI C プロトタイプがサブセットであるので、両方動作
     します。FreeBSD インクルードファイルファイルの sa_handler メンバの宣言
     は、(POSIX によって必要であるように) ANSI C のそれであるので、BSD スタイ
     ル関数の関数ポインタは、警告せずにコンパイルするためにキャスト (cast) す
     る必要があります。伝統的な BSD スタイルは、移植性がなく、そのケーパビリ
     ティが SA_SIGINFO ハンドラの完全なサブセットであり、その使用は、推奨され
     ません。

     sig 引数は、シグナル番号で、<signal.h> の SIG... 値の 1 つです。

     BSD スタイルハンドラの code 引数と SA_SIGINFO ハンドラの info 引数の
     si_code メンバは、シグナルの原因を説明する数値コードを含み、通常
     <sys/signal.h> の SI_... 値の 1 つ、またはシグナルに特有のコード、すなわ
     ち、SIGFPE のための FPE_... 値の 1 つです。

     BSD スタイルのハンドラへの scp 引数は、struct sigcontext のインスタンスを
     指します。

     POSIX SA_SIGINFO ハンドラへの uap 引数は、ucontext_t のインスタンスを指し
     ます。

エラー
     sigaction() システムコールは、次の 1 つが発生するなら、失敗し、新しいシグ
     ナルハンドラは、インストールされません:

     [EINVAL]           sig 引数が、有効なシグナル番号ではありません。

     [EINVAL]           SIGKILL または SIGSTOP のためのハンドラを無視するか、
                        または供給する試みが行われました。

関連項目
     kill(1), kill(2), ptrace(2), setitimer(2), setrlimit(2), sigaltstack(2),
     sigpending(2), sigprocmask(2), sigsuspend(2), wait(2), fpsetmask(3),
     setjmp(3), siginfo(3), siginterrupt(3), sigsetops(3), ucontext(3), tty(4)

規格
     sigaction() システムコールは、ISO/IEC 9945-1:1990 (``POSIX.1'') に適合す
     るはずです。SA_ONSTACK と SA_RESTART フラグは、シグナル SIGTRAP, SIGEMT,
     SIGBUS, SIGSYS, SIGURG, SIGIO, SIGXCPU, SIGXFSZ, SIGVTALRM, SIGPROF,
     SIGWINCH と SIGINFO と同様に、Berkeley の拡張です。それらのシグナルは、ほ
     とんどの BSD から派生したシステムで利用可能です。SA_NODEFER と
     SA_RESETHAND フラグは、他のオペレーティングシステムとの後方互換性のための
     ものです。SA_NOCLDSTOP と SA_NOCLDWAIT フラグは、他のオペレーティングシス
     テムに共通にある特徴的なオプションです。フラグは、SIGCHLD を無視すること
     によってゾンビの生成を回避するオプションともに、Version 2 of the Single
     UNIX Specification (``SUSv2'') によって承認されています。

FreeBSD 11.4                  September 30, 2016                  FreeBSD 11.4

Table of Contents

FreeBSD マニュアル検索