From d9c7ccdf60b8401efe575aaca045e6d6ea3e9d3d Mon Sep 17 00:00:00 2001 From: Akihiro MOTOKI Date: Tue, 26 Mar 2013 18:52:15 +0900 Subject: [PATCH] (split) LDP: Update draft and release pages (based on the previous commit) --- draft/man2/eventfd.2 | 279 +++++++++++++++++++++ draft/man2/ipc.2 | 57 +++++ draft/man2/kill.2 | 132 ++++++++++ draft/man2/sgetmask.2 | 67 ++++++ draft/man2/tkill.2 | 106 ++++++++ draft/man2/unshare.2 | 167 +++++++++++++ draft/man3/sigpause.3 | 76 ++++++ draft/man3/sigsetops.3 | 114 +++++++++ draft/man3/sigvec.3 | 141 +++++++++++ draft/man3/sigwait.3 | 77 ++++++ draft/man5/acct.5 | 146 +++++++++++ draft/man7/credentials.7 | 154 ++++++++++++ draft/man7/signal.7 | 576 ++++++++++++++++++++++++++++++++++++++++++++ release/man2/capget.2 | 23 +- release/man2/clone.2 | 4 +- release/man2/eventfd.2 | 20 +- release/man2/getpriority.2 | 4 +- release/man2/iopl.2 | 3 +- release/man2/ioprio_set.2 | 18 +- release/man2/ipc.2 | 6 +- release/man2/kill.2 | 11 +- release/man2/setsid.2 | 10 +- release/man2/sgetmask.2 | 6 +- release/man2/sigaction.2 | 31 ++- release/man2/signal.2 | 15 +- release/man2/sigwaitinfo.2 | 37 ++- release/man2/tkill.2 | 2 +- release/man2/unshare.2 | 24 +- release/man2/wait.2 | 2 +- release/man3/sigpause.3 | 2 +- release/man3/sigsetops.3 | 2 +- release/man3/sigvec.3 | 21 +- release/man3/sigwait.3 | 7 +- release/man5/acct.5 | 2 +- release/man7/capabilities.7 | 30 +-- release/man7/credentials.7 | 6 +- release/man7/signal.7 | 38 +-- release/man7/svipc.7 | 13 +- 38 files changed, 2243 insertions(+), 186 deletions(-) create mode 100644 draft/man2/eventfd.2 create mode 100644 draft/man2/ipc.2 create mode 100644 draft/man2/kill.2 create mode 100644 draft/man2/sgetmask.2 create mode 100644 draft/man2/tkill.2 create mode 100644 draft/man2/unshare.2 create mode 100644 draft/man3/sigpause.3 create mode 100644 draft/man3/sigsetops.3 create mode 100644 draft/man3/sigvec.3 create mode 100644 draft/man3/sigwait.3 create mode 100644 draft/man5/acct.5 create mode 100644 draft/man7/credentials.7 create mode 100644 draft/man7/signal.7 diff --git a/draft/man2/eventfd.2 b/draft/man2/eventfd.2 new file mode 100644 index 00000000..eb825b78 --- /dev/null +++ b/draft/man2/eventfd.2 @@ -0,0 +1,279 @@ +.\" Copyright (C) 2008 Michael Kerrisk +.\" starting from a version by Davide Libenzi +.\" +.\" %%%LICENSE_START(GPLv2+_SW_3_PARA) +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" This program is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public +.\" License along with this manual; if not, see +.\" . +.\" %%%LICENSE_END +.\" +.\" 2008-10-10, mtk: describe eventfd2(), and EFD_NONBLOCK and EFD_CLOEXEC +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH EVENTFD 2 2010\-08\-30 Linux "Linux Programmer's Manual" +.SH 名前 +eventfd \- イベント通知用のファイルディスクリプタを生成する +.SH 書式 +\fB#include \fP +.sp +\fBint eventfd(unsigned int \fP\fIinitval\fP\fB, int \fP\fIflags\fP\fB);\fP +.SH 説明 +\fBeventfd\fP() は "eventfd オブジェクト" を生成する。 eventfd +オブジェクトはユーザ空間アプリケーションがイベント待ち受け/通知用の 仕組みとして使うことができる。また、カーネルがユーザ空間アプリケーションに +イベントを通知するためにも使うことができる。 このオブジェクトには、unsigned の 64 ビット整数 (\fIuint64_t\fP) +型のカウンタが含まれており、このカウンタはカーネルにより管理される。 このカウンタは \fIinitval\fP 引き数で指定された値で初期化される。 + +以下の値のいくつかをビット単位の論理和 (OR) で指定することで、 +\fBeventfd\fP() の振舞いを変更することができる。 +.TP +\fBEFD_CLOEXEC\fP (Linux 2.6.27 以降) +新しいファイルディスクリプタに対して close\-on\-exec (\fBFD_CLOEXEC\fP) フラグをセットする。 +このフラグが役に立つ理由については、 \fBopen\fP(2) の \fBO_CLOEXEC\fP フラグの説明を参照のこと。 +.TP +\fBEFD_NONBLOCK\fP (Linux 2.6.27 以降) +新しく生成されるオープンファイル記述 (open file description) の \fBO_NONBLOCK\fP +ファイルステータスフラグをセットする。 このフラグを使うことで、 \fBO_NONBLOCK\fP をセットするために \fBfcntl\fP(2) +を追加で呼び出す必要がなくなる。 +.TP +\fBEFD_SEMAPHORE\fP (Linux 2.6.30 以降) +新しいファイルディスクリプタからの読み出しにおいて、セマフォ風の動作を行う。 +下記参照。 +.PP +バージョン 2.6.26 以前の Linux では、 \fIflags\fP 引き数は未使用であり、0 を指定しなければならない。 + +\fBeventfd\fP() は eventfd オブジェクトを参照するのに使用できる新しいファイルディスクリプタ +を返す。返されたファイルディスクリプタに対しては以下の操作を実行できる。 +.TP +\fBread\fP(2) +\fBread\fP(2) は成功すると、8 バイトの整数を返す。 +渡されたバッファの大きさが 8 バイト未満の場合、 +\fBread\fP(2) はエラー \fBEINVAL\fP で失敗する。 +.IP +\fBread\fP(2) が返す値は、ホストバイトオーダ、つまり +そのホストマシンにおける整数の通常のバイトオーダである。 +.IP +\fBread\fP(2) の動作は、 eventfd カウンタの現在の値が 0 以外であるかと、 +eventfd ファイルディスクリプタを作成する際に \fBEFD_SEMAPHORE\fP フラグが +指定されたか、により変化する。 +.RS +.IP * 3 +\fBEFD_SEMAPHORE\fP が指定されておらず、eventfd カウンタが 0 以外の値 +の場合、 \fBread\fP(2) はカウンタ値を格納した 8 バイトの値を返し、 +カウンタ値は 0 にリセットされる。 +.IP * +\fBEFD_SEMAPHORE\fP が指定されていて eventfd カウンタが 0 以外の値の場合、 +\fBread\fP(2) は値 1 の 8 バイト値を返し、カウンタ値は 1 減算される。 +.IP * +\fBread\fP(2) を呼び出した時点で eventfd カウンタが 0 の場合、 \fBread\fP(2) +はカウンタが 0 以外になるまで停止 (block) する (0 以外になった時点で +\fBread\fP(2) は上記で述べた通り実行を再開する)、 もしくはファイルディスク +リプタが非停止 (nonblocking) に設定されている場合はエラー \fBEAGAIN\fPで +失敗する。 +.RE +.TP +\fBwrite\fP(2) +\fBwrite\fP(2) は、引き数のバッファで渡された 8 バイトの整数値をカウンタに加算する。 カウンタに格納可能な最大値は unsigned の +64 ビット整数の最大値から 1 を引いた値 (すなわち 0xfffffffffffffffe) である。 +加算を行うとカウンタ値が最大値を超過する場合には、 そのファイルディスクリプタに対して \fBread\fP(2) が実行されるまで、 +\fBwrite\fP(2) は停止 (block) する、 もしくはファイルディスクリプタが非停止 (nonblocking) +に設定されている場合はエラー \fBEAGAIN\fP で失敗する。 +.IP +渡されたバッファの大きさが 8 バイト未満の場合、もしくは 値 0xffffffffffffffff を書き込もうとした場合、 \fBwrite\fP(2) +はエラー \fBEINVAL\fP で失敗する。 +.TP +\fBpoll\fP(2), \fBselect\fP(2) (と同様の操作) +返されたファイルディスクリプタは、 \fBpoll\fP(2) (\fBepoll\fP(7) も同じ) や \fBselect\fP(2) +をサポートしており、以下のような動作をする。 +.RS +.IP * 3 +カウンタが 0 より大きい値の場合、 ファイルディスクリプタは読み出し可能となる (\fBselect\fP(2) の \fIreadfds\fP 引き数や +\fBpoll\fP(2) の \fBPOLLIN\fP フラグ)。 +.IP * +少なくとも値 "1" を、停止 (block) を伴わずに書き込める場合、 ファイルディスクリプタは書き込み可能となる (\fBselect\fP(2) の +\fIwritefds\fP 引き数や \fBpoll\fP(2) の \fBPOLLOUT\fP フラグ)。 +.IP * +カウンタ値のオーバーフローが検出された場合、 \fBselect\fP(2) はファイルディスクリプタは読み出し可能と書き込み可能の両方を通知し、 +\fBpoll\fP(2) は \fBPOLLERR\fP イベントを返す。 上述の通り、 \fBwrite\fP(2) +でカウンタがオーバーフローすることは決してない。 しかしながら、 KAIO サブシステムによって 2^64 回の eventfd "signal +posts" が 実行された場合にはオーバーフローが起こり得る (理論的にはあり得るが、実用的にはあり得ない)。 オーバーフローが発生した場合、 +\fBread\fP(2) は \fIuint64_t\fP の最大値 (すなわち 0xffffffffffffffff) を返す。 +.RE +.IP +eventfd ファイルディスクリプタは、これ以外のファイルディスクリプタ 多重 API である \fBpselect\fP(2) と \fBppoll\fP(2) +もサポートしている。 +.TP +\fBclose\fP(2) +ファイルディスクリプタがそれ以降は必要なくなった際には、クローズすべきである。 同じ eventfd +オブジェクトに関連付けられたファイルディスクリプタが全て クローズされると、そのオブジェクト用の資源がカーネルにより解放される。 +.PP +\fBfork\fP(2) で生成された子プロセスは、 \fBeventfd\fP() で生成されたファイル +ディスクリプタのコピーを継承する。 複製されたファイルディスクリプタは同 +じ eventfd オブジェクトに関連付けられる。 +close\-on\-exec フラグが設定されていない場合、 \fBexecve\fP(2) の前後で +\fBeventfd\fP() で生成されたファイルディスクリプタは保持される。 +.SH 返り値 +成功すると、 \fBeventfd\fP() は新規の eventfd ファイルディスクリプタを返す。 エラーの場合、\-1 を返し、 \fIerrno\fP +にエラーを示す値を設定する。 +.SH エラー +.TP +\fBEINVAL\fP +\fIflags\fP にサポートされていない値が指定された。 +.TP +\fBEMFILE\fP +オープン済みのファイルディスクリプタの数がプロセスあたりの上限に 達していた。 +.TP +\fBENFILE\fP +オープン済みのファイル総数がシステム全体の上限に達していた。 +.TP +\fBENODEV\fP +.\" Note from Davide: +.\" The ENODEV error is basically never going to happen if +.\" the kernel boots correctly. That error happen only if during +.\" the kernel initialization, some error occur in the anonymous +.\" inode source initialization. +(カーネル内の) 無名 inode デバイスをマウントできなかった。 +.TP +\fBENOMEM\fP +新しい eventfd ファイルディスクリプタを生成するのに十分なメモリがなかった。 +.SH バージョン +.\" eventfd() is in glibc 2.7, but reportedly does not build +\fBeventfd\fP() はカーネル 2.6.22 以降の Linux で利用可能である。 正しく動作する glibc 側のサポートはバージョン +2.8 以降で提供されている。 \fBeventfd2\fP() システムコール (「注意」参照) は カーネル 2.6.27 以降の Linux +で利用可能である。 バージョン 2.9 以降では、glibc の \fBeventfd\fP() のラッパー関数は、カーネルが対応していれば +\fBeventfd2\fP() システムコールを利用する。 +.SH 準拠 +\fBeventfd\fP() と \fBeventfd2\fP() は Linux 固有である。 +.SH 注意 +アプリケーションは、パイプをイベントを通知するためだけに使用している 全ての場面において、パイプの代わりに eventfd ファイルディスクリプタを +使用することができる。 eventfd ファイルディスクリプタを使う方が、パイプを使う場合に比べて +カーネルでのオーバヘッドは比べるとずっと小さく、ファイルディスクリプタも 一つしか必要としない (パイプの場合は二つ必要である)。 + +.\" or eventually syslets/threadlets +カーネル内で使用すると、eventfd ファイルディスクリプタはカーネル空間からユーザ空間へのブリッジ機能を提供することができ、 例えば KAIO +(kernel AIO) のような機能が、あるファイルディスクリプタに何らかの操作が完了したことを 通知することができる。 + +eventfd ファイルディスクリプタの重要な点は、 eventfd ファイルディスクリプタが \fBselect\fP(2), \fBpoll\fP(2), +\fBepoll\fP(7) を使って他のファイルディスクリプタと全く同様に監視できる点である。 このことは、アプリケーションは「従来の +(traditional)」 ファイルの状態変化と eventfd インタフェースをサポートする他のカーネル機構の状態変化を同時に監視 +できることを意味する (\fBeventfd\fP() インタフェースがない時には、これらのカーネル機構は \fBselect\fP(2), +\fBpoll\fP(2), \fBepoll\fP(7) 経由で多重することはできなかった)。 +.SS "下層にある Linux のシステムコール" +下層にある Linux システムコールは二種類あり、 \fBeventfd\fP() と、もっと新しい \fBeventfd2\fP() である。 +\fBeventfd\fP() は \fIflags\fP 引き数を実装していない。 \fBeventfd2\fP() では上記の値の \fIflags\fP +が実装されている。 glibc のラッパー関数は、 \fBeventfd2\fP() が利用可能であれば、これを使用する。 +.SS "glibc の追加機能" +GNU C ライブラリは、eventfd ファイルディスクリプタの読み出しと書き込みに +を関する詳細のいくつか抽象化するために、一つの型と、二つの関数を追加で 定義している。 +.in +4n +.nf + +typedef uint64_t eventfd_t; + +int eventfd_read(int fd, eventfd_t *value); +int eventfd_write(int fd, eventfd_t value); +.fi +.in + +これらの関数は、eventfd ファイルディスクリプタに対する読み出しと 書き込みの操作を実行し、正しいバイト数が転送された場合には 0 +を返し、そうでない場合は \-1 を返す。 +.SH 例 +.PP +以下のプログラムは eventfd ファイルディスクリプタを生成し、 その後 fork を実行して子プロセスを生成する。 親プロセスが少しの間 +sleep する間に、子プロセスは プログラムのコマンドライン引き数で指定された整数(列)をそれぞれ eventfd ファイルディスクリプタに書き込む。 +親プロセスは sleep を完了すると eventfd ファイルディスクリプタから 読み出しを行う。 + +以下に示すシェルセッションにこのプログラムの使い方を示す。 +.in +4n +.nf + +$\fB ./a.out 1 2 4 7 14\fP +Child writing 1 to efd +Child writing 2 to efd +Child writing 4 to efd +Child writing 7 to efd +Child writing 14 to efd +Child completed write loop +Parent about to read +Parent read 28 (0x1c) from efd +.fi +.in +.SS プログラムのソース +\& +.nf +#include +#include +#include +#include +#include /* Definition of uint64_t */ + +#define handle_error(msg) \e + do { perror(msg); exit(EXIT_FAILURE); } while (0) + +int +main(int argc, char *argv[]) +{ + int efd, j; + uint64_t u; + ssize_t s; + + if (argc < 2) { + fprintf(stderr, "Usage: %s ...\en", argv[0]); + exit(EXIT_FAILURE); + } + + efd = eventfd(0, 0); + if (efd == \-1) + handle_error("eventfd"); + + switch (fork()) { + case 0: + for (j = 1; j < argc; j++) { + printf("Child writing %s to efd\en", argv[j]); + u = strtoull(argv[j], NULL, 0); + /* strtoull() allows various bases */ + s = write(efd, &u, sizeof(uint64_t)); + if (s != sizeof(uint64_t)) + handle_error("write"); + } + printf("Child completed write loop\en"); + + exit(EXIT_SUCCESS); + + default: + sleep(2); + + printf("Parent about to read\en"); + s = read(efd, &u, sizeof(uint64_t)); + if (s != sizeof(uint64_t)) + handle_error("read"); + printf("Parent read %llu (0x%llx) from efd\en", + (unsigned long long) u, (unsigned long long) u); + exit(EXIT_SUCCESS); + + case \-1: + handle_error("fork"); + } +} +.fi +.SH 関連項目 +\fBfutex\fP(2), \fBpipe\fP(2), \fBpoll\fP(2), \fBread\fP(2), \fBselect\fP(2), +\fBsignalfd\fP(2), \fBtimerfd_create\fP(2), \fBwrite\fP(2), \fBepoll\fP(7), +\fBsem_overview\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man2/ipc.2 b/draft/man2/ipc.2 new file mode 100644 index 00000000..ff05adb0 --- /dev/null +++ b/draft/man2/ipc.2 @@ -0,0 +1,57 @@ +.\" Copyright (c) 1995 Michael Chastain (mec@shell.portal.com), 15 April 1995. +.\" +.\" %%%LICENSE_START(GPLv2+_DOC_FULL) +.\" This is free documentation; you can redistribute it and/or +.\" modify it under the terms of the GNU General Public License as +.\" published by the Free Software Foundation; either version 2 of +.\" the License, or (at your option) any later version. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public +.\" License along with this manual; if not, see +.\" . +.\" %%%LICENSE_END +.\" +.\" Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH IPC 2 2012\-10\-16 Linux "Linux Programmer's Manual" +.SH 名前 +ipc \- System V IPC システムコール +.SH 書式 +.nf +\fBint ipc(unsigned int \fP\fIcall\fP\fB, int \fP\fIfirst\fP\fB, int \fP\fIsecond\fP\fB, int \fP\fIthird\fP\fB,\fP +\fB void *\fP\fIptr\fP\fB, long \fP\fIfifth\fP\fB);\fP +.fi +.SH 説明 +\fBipc\fP() は メッセージ、セマフォー、共有メモリに関する System V IPC コールの 共通のカーネルへのエントリポイントである。 +\fIcall\fP はどの IPC 関数を呼び出すかを決め; 他の引き数は適切なコールへと渡される。 +.PP +ユーザープログラムは通常の名前で適切な関数を呼び出すべきである。 標準ライブラリの実装者やカーネルハッカーのみが \fBipc\fP() +について知る必要がある。 +.SH 準拠 +\fBipc\fP() は Linux 特有であり、 移植を意図したプログラムでは 使用してはいけない。 +.SH 注意 +いくつかのアーキテクチャ\(emfor 例えば x86\-64 や ARM\(emでは、システムコール \fBipc\fP() +が存在しない。実際には、その代わりに \fBmsgctl\fP(2), \fBsemctl\fP(2), \fBshmctl\fP(2) +などが独立したシステムコールとして実装されている。 +.SH 関連項目 +\fBmsgctl\fP(2), \fBmsgget\fP(2), \fBmsgrcv\fP(2), \fBmsgsnd\fP(2), \fBsemctl\fP(2), +\fBsemget\fP(2), \fBsemop\fP(2), \fBshmat\fP(2), \fBshmctl\fP(2), \fBshmdt\fP(2), +\fBshmget\fP(2) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man2/kill.2 b/draft/man2/kill.2 new file mode 100644 index 00000000..8f4bdc74 --- /dev/null +++ b/draft/man2/kill.2 @@ -0,0 +1,132 @@ +.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992 +.\" +.\" %%%LICENSE_START(VERBATIM) +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.\" Modified by Michael Haardt +.\" Modified by Thomas Koenig +.\" Modified 1993-07-23 by Rik Faith +.\" Modified 1993-07-25 by Rik Faith +.\" Modified 1995-11-01 by Michael Haardt +.\" +.\" Modified 1996-04-14 by Andries Brouwer +.\" [added some polishing contributed by Mike Battersby ] +.\" Modified 1996-07-21 by Andries Brouwer +.\" Modified 1997-01-17 by Andries Brouwer +.\" Modified 2001-12-18 by Andries Brouwer +.\" Modified 2002-07-24 by Michael Kerrisk +.\" Added note on historical rules enforced when an unprivileged process +.\" sends a signal. +.\" Modified 2004-06-16 by Michael Kerrisk +.\" Added note on CAP_KILL +.\" Modified 2004-06-24 by aeb +.\" Modified, 2004-11-30, after idea from emmanuel.colbus@ensimag.imag.fr +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH KILL 2 2013\-02\-05 Linux "Linux Programmer's Manual" +.SH 名前 +kill \- プロセスにシグナルを送る +.SH 書式 +.nf +\fB#include \fP +.br +\fB#include \fP +.sp +\fBint kill(pid_t \fP\fIpid\fP\fB, int \fP\fIsig\fP\fB);\fP +.fi +.sp +.in -4n +glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): +.in +.sp +.ad l +\fBkill\fP(): _POSIX_C_SOURCE\ >=\ 1 || _XOPEN_SOURCE || _POSIX_SOURCE +.ad b +.SH 説明 +システムコールの \fBkill\fP() は、任意のプロセス・グループもしくはプロセスにシグナルを 送るのに使われる。 +.PP +\fIpid\fP に正の値を指定した場合、シグナル \fIsig\fP が \fIpid\fP で指定された ID を持つプロセスに送られる。 +.PP +\fIpid\fP に 0 を指定した場合、 呼び出し元のプロセスのプロセス・グループに属するすべてのプロセスに \fIsig\fP で指定したシグナルが送られる。 +.PP +\fIpid\fP に \-1 を指定した場合、 \fIsig\fP で指定したシグナルが、 呼び出し元のプロセスがシグナルを送る許可を持つ全てのプロセスに +送られる。但し、プロセス番号 1 (\fIinit\fP) へはシグナルは送られない。 以下の関連部分も参照のこと。 +.PP +\fIpid\fP に \-1 より小さな値を指定した場合、 ID が \fI\-pid\fP のプロセス・グループに属するすべてのプロセスに \fIsig\fP +で指定したシグナルが送られる。 +.PP +\fIsig\fP に 0 を指定した場合、シグナルは送られないが、 エラーのチェックは行われる。これを使って、プロセス ID や プロセスグループ ID +の存在確認を行うことができる。 + +プロセスがシグナルを送信する許可を持つためには、 プロセスが特権 (Linux では \fBCAP_KILL\fP ケーパビリティ (capability)) +を持つか、 送信元プロセスの実ユーザー ID または実効ユーザー ID が 送信先プロセスの実 set\-user\-ID または保存 +set\-user\-ID と 等しくなければならない。 \fBSIGCONT\fP の場合、送信プロセスと受信プロセスが +同じセッションに属していれば十分である。 +.SH 返り値 +成功した場合 (少なくとも一つのシグナルが送信された場合)、 0 が返される。エラーの場合 \-1 が返され、 \fIerrno\fP が適切に設定される。 +.SH エラー +.TP +\fBEINVAL\fP +無効なシグナルを指定した。 +.TP +\fBEPERM\fP +プロセスが、受信するプロセスのいずれに対しても シグナルを送る許可を持っていない。 +.TP +\fBESRCH\fP +指定したプロセスまたはプロセス・グループが存在しなかった。 ゾンビプロセスは存在するプロセスとしてみなされる。 +ゾンビプロセスとはすでに処理は終了しているが、親プロセスによる \fBwait\fP() 処理が行われていないプロセスのことである。 +.SH 準拠 +SVr4, 4.3BSD, POSIX.1\-2001. +.SH 注意 +プロセス番号 1 の \fIinit\fP プロセスに送ることができるシグナルは、 \fIinit\fP が明示的にシグナルハンドラを設定したシグナルだけである。 +こうなっているのは、誤ってシステムをダウンさせないようにするためである。 +.LP +POSIX.1\-2001 では、 \fIkill(\-1,sig)\fP が 呼び出し元のプロセスがシグナルを送ることが出来るプロセス全てに \fIsig\fP +を送ることを要求している。 但し、システム実装時に定められたシステムプロセスは シグナルの送信対象から除外される。 Linux +では、プロセスが自分自身にシグナルを送れるようになっているが、 Linux の \fIkill(\-1,sig)\fP +は呼び出し元のプロセスにはシグナルを送らない。 +.LP +POSIX.1\-2001 では以下の動作になることを要求している。 自分自身にシグナルを送ると、シグナルを送ったスレッドがそのシグナルをブロック +しておらず、他のどのスレッドもそのシグナルを受ける状態にもなく \fBsigwait\fP(3) でそのシグナルを待ってもいない場合、 \fBkill\fP() +が返る前に少なくとも一つのブロックされていない シグナルがシグナルを送ったスレッドに配送されなければならない。 +.SS "Linux での注意" +.\" In the 0.* kernels things chopped and changed quite +.\" a bit - MTK, 24 Jul 02 +Linux では、特権のないプロセスが他のプロセスにシグナルを送信するために 必要な権限についてのルールが、カーネルバージョンにより違っている。 +カーネル 1.0 から 1.2.2 では、送信側の実効ユーザーID が受信側の 実効ユーザー IDと一致すればシグナルを送信できた。 カーネル +1.2.3 から 1.3.77では、送信側の実効ユーザーID が受信側の 実ユーザーID か実効ユーザーID +のいずれかと一致すればシグナルを送信できた。 現在のルールは、POSIX.1\-2001 に準拠しており、カーネル 1.3.78 以降で 適用されている。 +.SH バグ +バージョン 2.6.7 以前の 2.6 系のカーネルには、 プロセスグループにシグナルを送ったときに、 呼び出し元のプロセスがプロセスグループの +(全メンバーではなく) 一部のメンバーに対してのみシグナルを送る許可を持っていない場合に、 \fBkill\fP() がエラー \fBEPERM\fP +で失敗するというバグがある。 このエラーが返るにもかかわらず、そのシグナルは呼び出し元が シグナルを送る許可を持つ全てのプロセスへ送られる。 +.SH 関連項目 +\fB_exit\fP(2), \fBkillpg\fP(2), \fBsignal\fP(2), \fBtkill\fP(2), \fBexit\fP(3), +\fBsigqueue\fP(3), \fBcredentials\fP(7), \fBcapabilities\fP(7), \fBsignal\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man2/sgetmask.2 b/draft/man2/sgetmask.2 new file mode 100644 index 00000000..9b350743 --- /dev/null +++ b/draft/man2/sgetmask.2 @@ -0,0 +1,67 @@ +.\" t +.\" Copyright (c) 2007 by Michael Kerrisk +.\" +.\" %%%LICENSE_START(VERBATIM) +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH SGETMASK 2 2012\-07\-13 Linux "Linux Programmer's Manual" +.SH 名前 +sgetmask, ssetmask \- シグナルマスクの操作 (廃止予定) +.SH 書式 +\fBlong sgetmask(void);\fP +.sp +\fBlong ssetmask(long \fP\fInewmask\fP\fB);\fP + +\fI注\fP: これらのシステムコールには、glibc のラッパー関数はない。「注意」の節を参照。 +.SH 説明 +これらのシステムコールは廃止予定であり、 「使用しないこと」。 代わりに \fBsigprocmask\fP(2) を使用すること。 + +\fBsgetmask\fP() は、呼び出し元プロセスのシグナルマスクを返す。 + +\fBssetmask\fP() は、呼び出し元プロセスのシグナルマスクを \fInewmask\fP で指定された値に設定し、変更前のシグナルマスクを返す。 + +これら二つのシステムコールが扱うシグナルマスクは、 単純なビットマスクである (この点が \fBsigprocmask\fP(2) で使用される +\fIsigset_t\fP と異なる)。 これらのマスクを作成したり検査するには \fBsigmask\fP(3) を使用すること。 +.SH 返り値 +\fBsgetmask\fP() は常に成功し、シグナルマスクを返す。 \fBssetmask\fP() は常に成功し、直前のシグナルマスクを返す。 +.SH エラー +これらのシステムコールは常に成功する。 +.SH 準拠 +これらのシステムコールは Linux 固有である。 +.SH 注意 +glibc はこれらの古いシステムコールに対するラッパー関数を提供していない。 +あまりないと思うが、これらを呼び出したい場合には \fBsyscall\fP(2) を使うこと。 + +これらのシステムコールは、 31 より大きいシグナル番号 (つまり、リアルタイムシグナル) を扱えない。 + +\fBSIGSTOP\fP や \fBSIGKILL\fP をブロックすることはできない。 +.SH 関連項目 +\fBsigprocmask\fP(2), \fBsignal\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man2/tkill.2 b/draft/man2/tkill.2 new file mode 100644 index 00000000..342c34aa --- /dev/null +++ b/draft/man2/tkill.2 @@ -0,0 +1,106 @@ +.\" Copyright (C) 2008 Michael Kerrisk +.\" and Copyright 2003 Abhijit Menon-Sen +.\" +.\" %%%LICENSE_START(VERBATIM) +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.\" 2004-05-31, added tgkill, ahu, aeb +.\" 2008-01-15 mtk -- rewrote DESCRIPTION +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH TKILL 2 2012\-07\-13 Linux "Linux Programmer's Manual" +.SH 名前 +tkill, tgkill \- スレッドにシグナルを送る +.SH 書式 +.nf +\fBint tkill(int \fP\fItid\fP\fB, int \fP\fIsig\fP\fB);\fP +.sp +\fBint tgkill(int \fP\fItgid\fP\fB, int \fP\fItid\fP\fB, int \fP\fIsig\fP\fB);\fP +.fi + +\fI注\fP: これらのシステムコールには、glibc のラッパー関数はない。「注意」の節を参照。 +.SH 説明 +\fBtgkill\fP() はスレッド・グループ \fItgid\fP に属するスレッド ID が \fItid\fP のスレッドにシグナル \fIsig\fP を送る。 +(これに対し、 \fBkill\fP(2) は一つのプロセス (すなわち、スレッド・グループ) にまとめてシグナルを 送るのにだけ利用できる。 +\fBkill\fP(2) で送信されたシグナルはプロセス内の任意のスレッドに配送される。) + +.\" FIXME: Maybe say something about the following: +.\" http://sourceware.org/bugzilla/show_bug.cgi?id=12889 +.\" Rich Felker +.\" There is a race condition in pthread_kill: it is possible that, +.\" between the time pthread_kill reads the pid/tid from the target +.\" thread descriptor and the time it makes the tgkill syscall, +.\" the target thread terminates and the same tid gets assigned +.\" to a new thread in the same process. +.\" +.\" (The tgkill syscall was designed to eliminate a similar race +.\" condition in tkill, but it only succeeded in eliminating races +.\" where the tid gets reused in a different process, and does not +.\" help if the same tid gets assigned to a new thread in the +.\" same process.) +.\" +.\" The only solution I can see is to introduce a mutex that ensures +.\" that a thread cannot exit while pthread_kill is being called on it. +.\" +.\" Note that in most real-world situations, like almost all race +.\" conditions, this one will be extremely rare. To make it +.\" measurable, one could exhaust all but 1-2 available pid values, +.\" possibly by lowering the max pid parameter in /proc, forcing +.\" the same tid to be reused rapidly. +\fBtkill\fP() はもう使われなくなった \fBtgkill\fP() の先祖である。 \fBtkill\fP() ではシグナルの送り先のスレッド ID +しか指定できない。 そのため、スレッドが終了して、そのスレッド ID が再利用される場合に、 意図しないスレッドにシグナルが送られる可能性がある。 +このシステムコールの使用は避けること。 + +\fItgid\fP に \-1 が指定された場合、 \fBtgkill\fP() は \fBtkill\fP() と等価である。 + +これらはシステムコールへの直接のインターフェースであり、 スレッド・ライブラリ内部での使用を意図したものである。 +.SH 返り値 +成功した場合、0 が返される。エラーが発生した場合、\-1 が返され、 \fIerrno\fP が適切に設定される。 +.SH エラー +.TP +\fBEINVAL\fP +指定されたスレッド ID、スレッドグループ ID、シグナルが不正であった。 +.TP +\fBEPERM\fP +許可がなかった。どのような許可が必要かについては、 \fBkill\fP(2) を参照のこと。 +.TP +\fBESRCH\fP +指定されたスレッドID (とスレッド・グループID) を持つプロセスが存在しない。 +.SH バージョン +\fBtkill\fP() は Linux 2.4.19 / 2.5.4 以降でサポートされ、 \fBtgkill\fP() は Linux 2.5.75 +で追加された。 +.SH 準拠 +\fBtkill\fP() と \fBtgkill\fP() は Linux 固有であり、 移植を想定したプログラムでは使用すべきではない。 +.SH 注意 +スレッド・グループの説明については \fBclone\fP(2) の \fBCLONE_THREAD\fP の説明を参照のこと。 + +glibc はこれらのシステムコールに対するラッパー関数を提供していない。 \fBsyscall\fP(2) を使って呼び出すこと。 +.SH 関連項目 +\fBclone\fP(2), \fBgettid\fP(2), \fBkill\fP(2), \fBrt_sigqueueinfo\fP(2) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man2/unshare.2 b/draft/man2/unshare.2 new file mode 100644 index 00000000..a3f64293 --- /dev/null +++ b/draft/man2/unshare.2 @@ -0,0 +1,167 @@ +.\" Copyright (C) 2006, Janak Desai +.\" and Copyright (C) 2006, Michael Kerrisk +.\" +.\" %%%LICENSE_START(GPL_NOVERSION_ONELINE) +.\" Licensed under the GPL +.\" %%%LICENSE_END +.\" +.\" Patch Justification: +.\" unshare system call is needed to implement, using PAM, +.\" per-security_context and/or per-user namespace to provide +.\" polyinstantiated directories. Using unshare and bind mounts, a +.\" PAM module can create private namespace with appropriate +.\" directories(based on user's security context) bind mounted on +.\" public directories such as /tmp, thus providing an instance of +.\" /tmp that is based on user's security context. Without the +.\" unshare system call, namespace separation can only be achieved +.\" by clone, which would require porting and maintaining all commands +.\" such as login, and su, that establish a user session. +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH UNSHARE 2 2012\-12\-31 Linux "Linux Programmer's Manual" +.SH 名前 +unshare \- プロセス実行コンテキストの一部を分離する +.SH 書式 +.nf +.\" Actually _BSD_SOURCE || _SVID_SOURCE +.\" FIXME See http://sources.redhat.com/bugzilla/show_bug.cgi?id=4749 +\fB#define _GNU_SOURCE\fP /* feature_test_macros(7) 参照 */ +\fB#include \fP +.sp +\fBint unshare(int \fP\fIflags\fP\fB);\fP +.fi +.SH 説明 +\fBunshare\fP() を使うと、プロセスは他のプロセスと現在共有している 実行コンテキストの一部を分離することができる。 +実行コンテキストの一部、たとえばマウント名前空間 (mount namespace) などは、新しいプロセスを \fBfork\fP(2) または +\fBvfork\fP(2) を使って生成したときに、暗黙のうちに共有される。 一方、仮想メモリなどは、 \fBclone\fP(2) +を使ってプロセスを生成するときに、明示的に共有することを要求できる。 + +\fBunshare\fP() の主な利用法は、プロセスが新しいプロセスを生成することなく、 共有実行コンテキストを制御することである。 + +\fIflags\fP 引き数はビットマスクであり、 実行コンテキストのどの部分の共有を解除するかを表す。 この引き数は、以下の定数の 0 個以上の OR +で指定する: +.TP +\fBCLONE_FILES\fP +\fBclone\fP(2) \fBCLONE_FILES\fP フラグの効果を取り消す。 ファイルディスクリプタテーブルを共有させず、 +呼び出し元プロセスは他のプロセスとファイルディスクリプタを共有しなくなる。 +.TP +\fBCLONE_FS\fP +\fBclone\fP(2) \fBCLONE_FS\fP フラグの効果を取り消す。ファイルシステム属性を共有させず、呼び出し元プロセスは、ルートディレクトリ +(\fBchroot\fP(2))、カレントディレクトリ (\fBchdir\fP(2))、 umask (\fBumask\fP(2)) +を他のプロセスと共有しなくなる。 +.TP +\fBCLONE_NEWIPC\fP (Linux 2.6.19 以降) +このフラグは \fBclone\fP(2) \fBCLONE_NEWIPC\fP フラグと同じ効果を持つ。 +System V IPC 名前空間を共有せず、呼び出し元プロセスは 他のプロセスとは +共有しない固有の System V IPC 名前空間のコピーを持つ。 このフラグを指定 +すると、 \fBCLONE_SYSVSEM\fP も暗黙のうちに指定される。 \fBCLONE_NEWIPC\fP を +使用するには \fBCAP_SYS_ADMIN\fP ケーパビリティが必要である。 +.TP +\fBCLONE_NEWNET\fP (Linux 2.6.24 以降) +このフラグは \fBclone\fP(2) \fBCLONE_NEWNET\fP フラグと同じ効果を持つ。ネット +ワーク名前空間を共有せず、呼び出し元プロセスは他のプロセスとは共有しな +い固有のネットワーク名前空間のコピーを持つ。\fBCLONE_NEWNET\fP を使用する +には \fBCAP_SYS_ADMIN\fP ケーパビリティが必要である。 +.TP +\fBCLONE_NEWNS\fP +.\" These flag name are inconsistent: +.\" CLONE_NEWNS does the same thing in clone(), but CLONE_VM, +.\" CLONE_FS, and CLONE_FILES reverse the action of the clone() +.\" flags of the same name. +このフラグは \fBclone\fP(2) \fBCLONE_NEWNS\fP フラグと同じ効果を持つ。 マウン +ト名前空間を共有せず、呼び出し元プロセスは 他のプロセスとは共有しない固 +有の名前空間のコピーを持つ。 このフラグを指定すると、 \fBCLONE_FS\fP も暗 +黙のうちに指定される。 \fBCLONE_NEWNS\fP を使用するには \fBCAP_SYS_ADMIN\fP +ケーパビリティが必要である。 +.TP +\fBCLONE_NEWUTS\fP (Linux 2.6.19 以降) +このフラグは \fBclone\fP(2) \fBCLONE_NEWUTS\fP フラグと同じ効果を持つ。 UTS +IPC 名前空間を共有せず、呼び出し元プロセスは他のプロセスとは共有しない +固有の UTS IPC 名前空間のコピーを持つ。 このフラグを指定すると、 +\fBCLONE_FS\fP も暗黙のうちに指定される。\fBCLONE_NEWUTS\fP を使用するには +\fBCAP_SYS_ADMIN\fP ケーパビリティが必要である。 +.TP +\fBCLONE_SYSVSEM\fP (Linux 2.6.26 以降) +.\" commit 9edff4ab1f8d82675277a04e359d0ed8bf14a7b7 +.\" As at 2.6.16, the following forced implications also apply, +.\" although the relevant flags are not yet implemented. +.\" If CLONE_THREAD is set force CLONE_VM. +.\" If CLONE_VM is set, force CLONE_SIGHAND. +.\" CLONE_NEWNSIf CLONE_SIGHAND is set and signals are also being shared +.\" (i.e., current->signal->count > 1), force CLONE_THREAD. +.\" +.\" FIXME . CLONE_VM is not (yet, as at 2.6.16) implemented. +.\" .TP +.\" .B CLONE_VM +.\" Reverse the effect of the +.\" .BR clone (2) +.\" .B CLONE_VM +.\" flag. +.\" .RB ( CLONE_VM +.\" is also implicitly set by +.\" .BR vfork (2), +.\" and can be reversed using this +.\" .BR unshare () +.\" flag.) +.\" Unshare virtual memory, so that the calling process no +.\" longer shares its virtual address space with any other process. +このフラグは \fBclone\fP(2) \fBCLONE_SYSVSEM\fP フラグの効果を逆転させる。 +System V セマフォのアンドゥ値を共有せず、呼び出し元プロセスは 他のプロ +セスとは共有しない固有のコピーを持つ。\fBCLONE_SYSVSEM\fP を使用するには +\fBCAP_SYS_ADMIN\fP ケーパビリティが必要である。 +.PP +\fIflags\fP に 0 が指定された場合、 \fBunshare\fP() は何も行わないので、 +呼び出し元プロセスの実行コンテキストは、何も変更されない。 +.SH 返り値 +成功した場合は 0 が返される。 失敗した場合は \-1 が返されて、 \fIerrno\fP にはエラーを示す値が設定される。 +.SH エラー +.TP +\fBEINVAL\fP +\fIflags\fP に不正なビットが指定された。 +.TP +\fBENOMEM\fP +呼び出し元のコンテキストのうち共有を解除する必要がある部分をコピーするために、 十分なメモリが確保できなかった。 +.TP +\fBEPERM\fP +呼び出し元プロセスはこの操作を行うのに必要な特権を持っていなかった。 +.SH バージョン +\fBunshare\fP() システムコールは Linux カーネル 2.6.16 で追加された。 +.SH 準拠 +\fBunshare\fP() システムコールは Linux 固有である。 +.SH 注意 +.\" FIXME all of the following needs to be reviewed for the current kernel +.\" However, we can do unshare(CLONE_SIGHAND) if CLONE_SIGHAND +.\" was not specified when doing clone(); i.e., unsharing +.\" signal handlers is permitted if we are not actually +.\" sharing signal handlers. mtk +.\" However, we can do unshare(CLONE_VM) if CLONE_VM +.\" was not specified when doing clone(); i.e., unsharing +.\" virtual memory is permitted if we are not actually +.\" sharing virtual memory. mtk +.\" +.\"9) Future Work +.\"-------------- +.\"The current implementation of unshare does not allow unsharing of +.\"signals and signal handlers. Signals are complex to begin with and +.\"to unshare signals and/or signal handlers of a currently running +.\"process is even more complex. If in the future there is a specific +.\"need to allow unsharing of signals and/or signal handlers, it can +.\"be incrementally added to unshare without affecting legacy +.\"applications using unshare. +.\" +\fBclone\fP(2) で新しいプロセスを生成したときに共有される全てのプロセス属性を、 \fBunshare\fP() +によって共有の解除ができるわけではない。 特に、カーネル 3.8 時点では、 \fBunshare\fP() に \fBCLONE_SIGHAND\fP, +\fBCLONE_THREAD\fP, \fBCLONE_VM\fP の効果を取り消すためのフラグが実装されていない。 +これらの機能は、必要であれば将来追加されるかもしれない。 +.SH 関連項目 +\fBclone\fP(2), \fBfork\fP(2), \fBkcmp\fP(2), \fBsetns\fP(2), \fBvfork\fP(2) + +Linux カーネルソース内の \fIDocumentation/unshare.txt\fP +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man3/sigpause.3 b/draft/man3/sigpause.3 new file mode 100644 index 00000000..71fd4d36 --- /dev/null +++ b/draft/man3/sigpause.3 @@ -0,0 +1,76 @@ +.\" Copyright (C) 2004 Andries Brouwer (aeb@cwi.nl) +.\" +.\" %%%LICENSE_START(VERBATIM) +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH SIGPAUSE 3 2010\-09\-12 Linux "Linux Programmer's Manual" +.SH 名前 +sigpause \- ブロックされたシグナルをアトミックに解放して割り込みを待つ +.SH 書式 +.nf +\fB#include \fP +.sp +\fBint sigpause(int \fP\fIsigmask\fP\fB); /* BSD */\fP +.sp +\fBint sigpause(int \fP\fIsig\fP\fB); /* System V / UNIX 95 */\fP +.fi +.SH 説明 +この関数を使わないこと。 代わりに \fBsigsuspend\fP(2) を使うこと。 +.LP +関数 \fBsigpause\fP() はシグナルを待つように設計されている。 この関数はプロセスのシグナルマスク (ブロックされたシグナルのセット) +を変更し、 シグナルが到着するのを待つ。 シグナルが到着すると、シグナルマスクは元に戻される。 +.SH 返り値 +\fBsigpause\fP() が返った場合、この関数はシグナルによって割り込まれている。 返り値は \-1 で、 \fIerrno\fP は \fBEINTR\fP +に設定される。 +.SH 準拠 +System V 版の \fBsigpause\fP() は POSIX.1\-2001 で標準化されている。 +.SH 注意 +.SS 歴史 +.\" __xpg_sigpause: UNIX 95, spec 1170, SVID, SVr4, XPG +この関数の古典的な BSD 版は 4.2BSD で登場した。 この関数はプロセスのシグナルマスクを \fIsigmask\fP に設定する。 UNIX 95 +では BSD 版と互換性のない System V 版のこの関数が標準化された。 UNIX 95 版は、指定されたシグナル \fIsig\fP +をプロセスのシグナルマスクから削除するだけである。 同じ名前で互換性のない 2 つの関数があるという不幸な事態は、 \fB\%sigsuspend\fP(2) +関数によって解消された。 この関数は (\fIint\fP の代わりに) \fBsigset_t *\fP 引き数をとる。 +.SS "Linux での注意" +Linux では、このルーチンは Sparc (sparc64) アーキテクチャでのみ システムコールとなっている。 + +libc4 と libc5 には BSD 版しかない。 + +.\" +.\" For the BSD version, one usually uses a zero +.\" .I sigmask +.\" to indicate that no signals are to be blocked. +機能検査マクロ \fB_BSD_SOURCE\fP が定義され、 \fB_POSIX_SOURCE\fP, \fB_POSIX_C_SOURCE\fP, +\fB_XOPEN_SOURCE\fP, \fB_GNU_SOURCE\fP, \fB_SVID_SOURCE\fP のいずれも定義されていない場合、 glibc は +BSD 版を使う。 それ以外の場合には、System V 版を使用する。 +.SH 関連項目 +\fBkill\fP(2), \fBsigaction\fP(2), \fBsigprocmask\fP(2), \fBsigsuspend\fP(2), +\fBsigblock\fP(3), \fBsigvec\fP(3), \fBfeature_test_macros\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man3/sigsetops.3 b/draft/man3/sigsetops.3 new file mode 100644 index 00000000..3ddfe1a9 --- /dev/null +++ b/draft/man3/sigsetops.3 @@ -0,0 +1,114 @@ +.\" Copyright (c) 1994 Mike Battersby +.\" +.\" %%%LICENSE_START(VERBATIM) +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.\" Modified by aeb, 960721 +.\" 2005-11-21, mtk, added descriptions of sigisemptyset(), sigandset(), +.\" and sigorset() +.\" 2007-10-26 mdw added wording that a sigset_t must be initialized +.\" prior to use +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH SIGSETOPS 3 2008\-09\-01 Linux "Linux Programmer's Manual" +.SH 名前 +sigemptyset, sigfillset, sigaddset, sigdelset, sigismember \- POSIX シグナル集合の操作 +.SH 書式 +\fB#include \fP +.sp +\fBint sigemptyset(sigset_t *\fP\fIset\fP\fB);\fP +.sp +\fBint sigfillset(sigset_t *\fP\fIset\fP\fB);\fP +.sp +\fBint sigaddset(sigset_t *\fP\fIset\fP\fB, int \fP\fIsignum\fP\fB);\fP +.sp +\fBint sigdelset(sigset_t *\fP\fIset\fP\fB, int \fP\fIsignum\fP\fB);\fP +.sp +\fBint sigismember(const sigset_t *\fP\fIset\fP\fB, int \fP\fIsignum\fP\fB);\fP +.sp +.in -4n +glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): +.in +.sp +.ad l +\fBsigemptyset\fP(), \fBsigfillset\fP(), \fBsigaddset\fP(), \fBsigdelset\fP(), +\fBsigismember\fP(): +.RS 4 +_POSIX_C_SOURCE\ >=\ 1 || _XOPEN_SOURCE || _POSIX_SOURCE +.RE +.ad b +.SH 説明 +これらの関数は POSIX シグナル集合(signal set)を操作するため使用する。 +.PP +\fBsigemptyset\fP() は \fIset\fP で与えられたシグナル集合を空に初期化し、シグナルが一つも 含まれていない状態にする。 +.PP +\fBsigfillset\fP() は \fIset\fP で与えられたシグナル集合が全てのシグナルを含むようにする。 +.PP +\fBsigaddset\fP() と \fBsigdelset\fP() は \fIset\fP に \fIsignum\fP +シグナルをそれぞれ加えたり、削除したりする。 +.PP +\fBsigismember\fP() は \fIsignum\fP が \fIset\fP に含まれているかどうかをテストする。 +.PP +\fIsigset_t\fP 型のオブジェクトは、関数 \fBsigaddset\fP(), \fBsigdelset\fP(), \fBsigismember\fP() +や後述の glibc の追加関数 (\fBsigisemptyset\fP(), \fBsigandset\fP(), \fBsigorset\fP()) に渡す前に、 +\fBsigemptyset\fP() か \fBsigfillset\fP() を呼び出して初期化しなければならない。 +初期化しなかった場合の結果は未定義である。 +.SH 返り値 +\fBsigemptyset\fP(), \fBsigfillset\fP(), \fBsigaddset\fP(), \fBsigdelset\fP() は成功すれば 0 +を、エラーの場合は \-1 を返す。 +.PP +\fBsigismember\fP() は \fIsignum\fP が \fIset\fP に含まれていれば 1 を返し、含まれていなければ 0 を返す。 +エラーの場合は \-1 を返す。 +.SH エラー +.TP +\fBEINVAL\fP +\fIsig\fP が有効なシグナルではない。 +.SH 準拠 +POSIX.1\-2001. +.SH 注意 +.SS "glibc での注意" +\fB_GNU_SOURCE\fP 機能検査マクロが定義されていると、 \fI\fP でシグナル集合を操作する +3つの関数が追加で公開される。 +.TP +\fBint sigisemptyset(sigset_t *\fP\fIset\fP\fB);\fP +\fIset\fP にシグナルが一つも含まれていなければ 1 を返し、 それ以外は 0 を返す。 +.TP +\fBint sigorset(sigset_t *\fP\fIdest\fP\fB, sigset_t *\fP\fIleft\fP\fB, sigset_t *\fP\fIright\fP\fB);\fP +シグナル集合 \fIleft\fP と \fIleft\fP の和集合を \fIdest\fP に書き込む。 +.TP +\fBint sigandset(sigset_t *\fP\fIdest\fP\fB, sigset_t *\fP\fIleft\fP\fB, sigset_t *\fP\fIright\fP\fB);\fP +シグナル集合 \fIleft\fP と \fIleft\fP の積集合を \fIdest\fP に書き込む。 +.PP +\fBsigorset\fP() と \fBsigandset\fP() は成功すると 0 を、失敗すると \-1 を返す。 +.PP +これらの関数は非標準であり、(他にも同様の関数を提供しているシステムも いくつかはあるが) 移植性を考慮したアプリケーションでは使用を避けるべき +である。 +.SH 関連項目 +\fBsigaction\fP(2), \fBsigpending\fP(2), \fBsigprocmask\fP(2), \fBsigsuspend\fP(2) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man3/sigvec.3 b/draft/man3/sigvec.3 new file mode 100644 index 00000000..77b22713 --- /dev/null +++ b/draft/man3/sigvec.3 @@ -0,0 +1,141 @@ +.\" t +.\" Copyright (c) 2005 by Michael Kerrisk +.\" +.\" %%%LICENSE_START(VERBATIM) +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH SIGVEC 3 2012\-09\-06 Linux "Linux Programmer's Manual" +.SH 名前 +sigvec, sigblock, sigsetmask, siggetmask, sigmask \- BSD 版シグナル API +.SH 書式 +\fB#include \fP +.sp +\fBint sigvec(int \fP\fIsig\fP\fB, struct sigvec *\fP\fIvec\fP\fB, struct sigvec +*\fP\fIovec\fP\fB);\fP +.sp +\fBint sigmask(int \fP\fIsignum\fP\fB);\fP +.sp +\fBint sigblock(int \fP\fImask\fP\fB);\fP +.sp +\fBint sigsetmask(int \fP\fImask\fP\fB);\fP +.sp +\fBint siggetmask(void);\fP +.sp +.in -4n +glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): +.in +.sp +上記の全ての関数: _BSD_SOURCE +.SH 説明 +これらの関数は、昔ながらの BSD 版シグナル API を使用しているプログラム に対して互換性のあるインタフェースを glibc +で提供するものである。 この API は過去のものであり、新しいアプリケーションでは POSIX シグナル API (\fBsigaction\fP(2), +\fBsigprocmask\fP(2) など) を使用すべきである。 + +関数 \fBsigvec\fP() は、(POSIX の \fBsigaction\fP(2) と同様に) シグナル \fIsig\fP の動作の設定・取得を行う。 +\fIvec\fP は、NULL 以外の場合、 \fIsig\fP の新しい動作を定義した \fIsigvec\fP 構造体へのポインタである。 \fIovec\fP +は、NULL 以外の場合、 \fIsig\fP の変更前の動作を返すために使用される \fIsigvec\fP 構造体へのポインタである。 \fIsig\fP +の動作を変更せずに現在の動作を取得するためには、 \fIvec\fP に NULL を指定し、 \fIovec\fP に NULL でないポインタを指定すればよい。 + +シグナル \fBSIGKILL\fP と \fBSIGSTOP\fP に対する動作は変更できない。 + +\fIsigvec\fP 構造体は以下の通りである: +.in +4n +.nf + +struct sigvec { + void (*sv_handler)(int); /* Signal disposition */ + int sv_mask; /* Signals to be blocked in handler */ + int sv_flags; /* Flags */ +}; + +.fi +.in +\fIsv_handler\fP フィールドはシグナルの動作を指定するもので、 シグナルハンドラ関数のアドレスか、 \fBSIG_DFL\fP と +\fBSIG_IGN\fP のいずれかを指定できる。 \fBSIG_DFL\fP はシグナルに適用されるデフォルトの動作を意味し、 \fBSIG_IGN\fP +はシグナルを無視することを意味する。 + +\fIsv_handler\fP にシグナルハンドラのアドレスを指定した場合、 \fIsv_mask\fP +はハンドラが実行中にブロックされるべきシグナルのマスクを指定する。 また、ハンドラを起動したシグナル自身はブロックされる。 \fBSIGKILL\fP か +\fBSIGSTOP\fP をブロックしようとした場合には、黙って無視される。 + +\fIsv_handler\fP にシグナルハンドラのアドレスを指定した場合、 \fIsv_flags\fP +フィールドはハンドラが呼ばれた際の挙動を制御するフラグを指定する。 このフィールドには、0 か、以下のフラグを 1個以上指定できる: +.TP +\fBSV_INTERRUPT\fP +シグナルハンドラが停止中のシステムコールを中断した場合、 ハンドラから復帰しても、システムコールは再開されず、 エラー \fBEINTR\fP で失敗する。 +このフラグを指定しなかった場合、システムコールは デフォルトで再開される。 +.TP +\fBSV_RESETHAND\fP +シグナルハンドラを呼び出す前にシグナルの動作を デフォルトにリセットする。 このフラグを指定しなかった場合、もう一度 \fBsigvec\fP() +を呼び出して明示的に削除されるか、プロセスが \fBexecve\fP(2) を実行するまで、ハンドラは設定されたままとなる。 +.TP +\fBSV_ONSTACK\fP +代替シグナルスタック上でシグナルハンドラを実行する (歴史的に、BSD では代替シグナルスタックは廃止された関数 \fBsigstack\fP() +を使って設定する。POSIX では、代わりに \fBsigaltstack\fP(2) を使用する)。 +.PP +関数 \fBsigmask\fP() は \fIsignum\fP に対する「シグナルマスク」を構成して返す。 例えば、以下のようなコードを使うと、 +\fBsigvec\fP() に渡す \fIvec.sv_mask\fP を初期化できる。 +.nf + + vec.sv_mask = sigmask(SIGQUIT) | sigpause(SIGABRT); + /* Block SIGQUIT and SIGABRT during + handler execution */ +.fi +.PP +\fBsigblock\fP() 関数は、 \fImask\fP にあるシグナルをプロセスのシグナルマスクに追加し (POSIX の +\fIsigprocmask(SIG_BLOCK)\fP と同様)、変更前のプロセスのシグナルマスクを返す。 \fBSIGKILL\fP や \fBSIGSTOP\fP +をブロックしようとした場合には、黙って無視される。 +.PP +\fBsigsetmask\fP() 関数はプロセスのシグナルマスクを \fImask\fP で指定された値に設定し (POSIX の +\fIsigprocmask(SIG_SETMASK)\fP と同様)、変更前のプロセスのシグナルマスクを返す。 +.PP +\fBsiggetmask\fP() 関数はプロセスの現在のシグナルマスクを返す。この関数は \fIsigblock(0)\fP と等価である。 +.SH 返り値 +\fBsigvec\fP() 関数は成功すると 0 を返す。エラーの場合、\-1 を返し、 \fIerrno\fP にエラーを示す値をセットする。 + +\fBsigblock\fP() と \fBsigsetmask\fP() は変更前のシグナルマスクを返す。 + +\fBsigmask\fP() 関数は \fIsignum\fP のシグナルマスクを返す。 +.SH エラー +\fBsigaction\fP(2) と \fBsigprocmask\fP(2) の「エラー」の節を参照。 +.SH 準拠 +これらの関数のうち \fBsiggetmask\fP() 以外の全ては 4.3BSD にあった。 \fBsiggetmask\fP() の出自ははっきりしない。 +これらの関数は廃止予定であり、新しいプログラムでは使用しないこと。 +.SH 注意 +4.3BSD では、信頼性のあるシグナル処理機構を提供する (\fIvec.sv_mask\fP を 0 で \fBsigvec\fP() +を呼び出したときと同様)。 System V が提供する処理機構は信頼性のないものである。 POSIX.1\-2001 では、 \fBsignal\fP() +のこの点は規定しないままとなっている。 さらなる詳細については \fBsignal\fP(2) を参照。 + +BSD と System V のどちらのシステムでも シグナルを待つために、 \fBsigpause\fP(3) という名前の関数が提供されているが、 +この関数の引き数は両方のシステムで異なる。 詳細は \fBsigpause\fP(3) を参照。 +.SH 関連項目 +\fBkill\fP(2), \fBpause\fP(2), \fBsigaction\fP(2), \fBsignal\fP(2), \fBsigprocmask\fP(2), +\fBraise\fP(3), \fBsigpause\fP(3), \fBsigset\fP(3), \fBsignal\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man3/sigwait.3 b/draft/man3/sigwait.3 new file mode 100644 index 00000000..04082750 --- /dev/null +++ b/draft/man3/sigwait.3 @@ -0,0 +1,77 @@ +.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk +.\" +.\" +.\" %%%LICENSE_START(VERBATIM) +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH SIGWAIT 3 2012\-07\-21 Linux "Linux Programmer's Manual" +.SH 名前 +sigwait \- シグナルを待つ +.SH 書式 +.nf +\fB#include \fP + +\fB int sigwait(const sigset_t *\fP\fIset\fP\fB, int *\fP\fIsig\fP\fB);\fP +.fi +.sp +.in -4n +glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): +.in +.sp +.ad l +\fBsigwait\fP(): _POSIX_C_SOURCE\ >=\ 1 || _XOPEN_SOURCE || _POSIX_SOURCE +.ad b +.SH 説明 +\fBsigwait\fP() 関数は、シグナル集合 \fIset\fP で指定されたシグナルの一つが処理待ち (pending) になるまで、 +呼び出したスレッドの実行を中断する。 この関数はそのシグナルを受け取り (つまり、処理待ちのシグナルのリスト +からそのシグナルを削除し)、そのシグナル番号を \fIsig\fP に格納して返す。 + +\fBsigwait\fP() の動作は \fBsigwaitinfo\fP(2) と同じだが、以下の点が異なる。 +.IP * 2 +\fBsigwait\fP() は、シグナルの内容を表す \fIsiginfo_t\fP 構造体を返すのではなく、単にシグナル番号を返す。 +.IP * +返り値が \fBsigwaitinfo\fP(2) とは異なる。 +.SH 返り値 +成功すると、 \fBsigwait\fP() は 0 を返す。 エラーの場合、(「エラー」の節のリストにある) 正のエラー番号を返す。 +.SH エラー +.TP +\fBEINVAL\fP +.\" Does not occur for glibc. +\fIset\fP に無効なシグナル番号が入っている。 +.SH 準拠 +POSIX.1\-2001. +.SH 注意 +\fBsigwait\fP() は \fBsigtimedwait\fP(2) を使って実装されている。 +.SH 例 +\fBpthread_sigmask\fP(3) を参照。 +.SH 関連項目 +\fBsigaction\fP(2), \fBsignalfd\fP(2), \fBsigpending\fP(2), \fBsigsuspend\fP(2), +\fBsigwaitinfo\fP(2), \fBsigsetops\fP(3), \fBsignal\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man5/acct.5 b/draft/man5/acct.5 new file mode 100644 index 00000000..f68e47fc --- /dev/null +++ b/draft/man5/acct.5 @@ -0,0 +1,146 @@ +.\" Copyright (C) 2008, Michael Kerrisk +.\" +.\" %%%LICENSE_START(VERBATIM) +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH ACCT 5 2008\-06\-15 Linux "Linux Programmer's Manual" +.SH 名前 +acct \- プロセス・アカウンティング・ファイル +.SH 書式 +\fB#include \fP +.SH 説明 +カーネルがプロセス・アカウンティングのオプション (\fBCONFIG_BSD_PROCESS_ACCT\fP) を有効にして作成されていると、以下のように +\fBacct\fP(2) を呼び出すとプロセス・アカウンティングが開始される。 + +.in +4n +acct("/var/log/pacct"); +.in + +プロセス・アカウンティングが有効になっていると、カーネルは システム上の各プロセスが終了するたびにアカウンティングファイルに レコードを書き込む。 +このレコードは、終了したプロセスに関する情報を保持するもので、 \fI\fP で以下のように定義されている。 + +.in +4n +.nf +#define ACCT_COMM 16 + +typedef u_int16_t comp_t; + +struct acct { + char ac_flag; /* Accounting flags */ + u_int16_t ac_uid; /* Accounting user ID */ + u_int16_t ac_gid; /* Accounting group ID */ + u_int16_t ac_tty; /* Controlling terminal */ + u_int32_t ac_btime; /* Process creation time + (seconds since the Epoch) */ + comp_t ac_utime; /* User CPU time */ + comp_t ac_stime; /* System CPU time */ + comp_t ac_etime; /* Elapsed time */ + comp_t ac_mem; /* Average memory usage (kB) */ + comp_t ac_io; /* Characters transferred (unused) */ + comp_t ac_rw; /* Blocks read or written (unused) */ + comp_t ac_minflt; /* Minor page faults */ + comp_t ac_majflt; /* Major page faults */ + comp_t ac_swaps; /* Number of swaps (unused) */ + u_int32_t ac_exitcode; /* Process termination status + (see wait(2)) */ + char ac_comm[ACCT_COMM+1]; + /* Command name (basename of last + executed command; null\-terminated) */ + char ac_pad[\fIX\fP]; /* padding bytes */ +}; + +enum { /* Bits that may be set in ac_flag field */ + AFORK = 0x01, /* Has executed fork, but no exec */ + ASU = 0x02, /* Used superuser privileges */ + ACORE = 0x08, /* Dumped core */ + AXSIG = 0x10 /* Killed by a signal */ +}; +.fi +.in +.PP +データ型 \fIcomp_t\fP は浮動小数点値で、3 ビット幅の基数が 8 の指数部と 13 ビット幅の仮数部から 構成される。 \fIcomp_t\fP +型の値 \fIc\fP は以下のようにして (long 型の) 整数に変換できる。 +.nf + + v = (c & 0x1fff) << (((c >> 13) & 0x7) * 3); +.fi +.PP +フィールド \fIac_utime\fP, \fIac_stime\fP, \fIac_etime\fP は "clock ticks" 単位で計測した時間である。 +これらの値を \fIsysconf(_SC_CLK_TCK)\fP で割ると、秒に変換できる。 +.SS "バージョン 3 のアカウンティングファイルのフォーマット" +カーネル 2.6.8 以降では、 別のバージョンのアカウンティングファイルを生成することができ、 これを使うにはカーネル構築時に +\fBCONFIG_BSD_PROCESS_ACCT_V3\fP オプションが有効になっている必要がある。 +このオプションが設定されると、アカウンティングファイルに書き込まれる レコードにフィールドが追加される。 また、フィールド \fIc_uid\fP と +\fIac_gid\fP の幅が 16 ビットから 32 ビットに拡張される (これは Linux 2.4 以降で UID と GID +のサイズが増えているのに 対応したものである)。 このレコードは以下のように定義されている。 + +.in +4n +.nf +struct acct_v3 { + char ac_flag; /* Flags */ + char ac_version; /* Always set to ACCT_VERSION (3) */ + u_int16_t ac_tty; /* Controlling terminal */ + u_int32_t ac_exitcode; /* Process termination status */ + u_int32_t ac_uid; /* Real user ID */ + u_int32_t ac_gid; /* Real group ID */ + u_int32_t ac_pid; /* Process ID */ + u_int32_t ac_ppid; /* Parent process ID */ + u_int32_t ac_btime; /* Process creation time */ + float ac_etime; /* Elapsed time */ + comp_t ac_utime; /* User CPU time */ + comp_t ac_stime; /* System time */ + comp_t ac_mem; /* Average memory usage (kB) */ + comp_t ac_io; /* Characters transferred (unused) */ + comp_t ac_rw; /* Blocks read or written + (unused) */ + comp_t ac_minflt; /* Minor page faults */ + comp_t ac_majflt; /* Major page faults */ + comp_t ac_swaps; /* Number of swaps (unused) */ + char ac_comm[ACCT_COMM]; /* Command name */ +}; +.fi +.in +.SH バージョン +\fIacct_v3\fP 構造体はバージョン 2.6 以降の glibc で定義されている。 +.SH 準拠 +プロセスアカウンティングは BSD 由来である。 この機能はほとんどのシステムに存在するが、標準化されておらず、 +その詳細はシステムによりいくらか異なる。 +.SH 注意 +アカウンティングファイルのレコードは、プロセスの終了時刻の順序となる。 + +バージョン 2.6.9 以前のカーネルでは、 NPTL スレッドライブラリを使って作成されたスレッドでは +スレッド毎に別々のアカウンティングレコードが書き込まれていた。 Linux 2.6.10 以降では、プロセス内の最後のスレッドが終了すると、 +プロセス全体についてのアカウンティングレコードが一つだけ書き込まれる。 + +\fIproc/sys/kernel/acct\fP ファイル (\fBproc\fP(5) で説明されている) は、ディスク容量の残りが少なくなった際の +プロセス・アカウンティングの動作を制御する設定を保持している。 +.SH 関連項目 +\fBlastcomm\fP(1), \fBacct\fP(2), \fBaccton\fP(8), \fBsa\fP(8) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man7/credentials.7 b/draft/man7/credentials.7 new file mode 100644 index 00000000..d00eea84 --- /dev/null +++ b/draft/man7/credentials.7 @@ -0,0 +1,154 @@ +.\" Copyright (c) 2007 by Michael Kerrisk +.\" +.\" %%%LICENSE_START(VERBATIM) +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.\" 2007-06-13 Creation +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH CREDENTIALS 7 2008\-06\-03 Linux "Linux Programmer's Manual" +.SH 名前 +credentials \- 認証に用いられるプロセスの識別子 +.SH 説明 +.SS "プロセスID (PID)" +各プロセスは、負でない整数の一意な識別子を持つ。 この識別子は \fBfork\fP(2) を使ってプロセスが生成される際に割り当てられる。 プロセスは +\fBgetpid\fP(2) を使って自分の PID を取得できる。 PID は \fIpid_t\fP 型で表現される (\fIpid_t\fP は +\fI\fP で定義されている)。 + +.\" .BR sched_rr_get_interval (2), +.\" .BR sched_getaffinity (2), +.\" .BR sched_setaffinity (2), +.\" .BR sched_getparam (2), +.\" .BR sched_setparam (2), +.\" .BR sched_setscheduler (2), +.\" .BR sched_getscheduler (2), +.\" .BR getsid (2), +.\" .BR waitid (2), +.\" .BR wait4 (2), +PID は各種のシステムコールでそのシステムコールが作用するプロセスを 特定するために使用される。以下に例を挙げる: \fBkill\fP(2), +\fBptrace\fP(2), \fBsetpriority\fP(2), \fBsetpgid\fP(2), \fBsetsid\fP(2), +\fBsigqueue\fP(3), \fBwaitpid\fP(2). + +プロセスの PID は \fBexecve\fP(2) の前後で不変である。 +.SS "親プロセス ID (PPID)" +プロセスの親プロセスの ID は、 \fBfork\fP(2) を使ってそのプロセスを生成したプロセスを示す。 プロセスは \fBgetppid\fP(2) +を使って自分の PPID を取得できる。 PPID は \fIpid_t\fP 型で表現される。 + +プロセスの PPID は \fBexecve\fP(2) の前後で不変である。 +.SS "プロセスグループ ID とセッション ID" +各プロセスはセッション ID とプロセスグループ ID を持つ。 これらの ID はどちらも \fIpid_t\fP 型で表現される。 プロセスは、それぞれ +\fBgetsid\fP(2), \fBgetpgrp\fP(2) を使って自分のセッション ID、プロセスグループ ID を取得できる。 + +\fBfork\fP(2) で生成された子プロセスは親プロセスのセッション ID とプロセスグループ ID を継承する。プロセスのセッション ID +とプロセスグループ ID は \fBexecve\fP(2) の前後で不変である。 + +セッションとプロセスグループの概念は、シェルのジョブ制御を行うために 考案されたものである。 プロセスグループ (時には「ジョブ」と呼ばれることもある) +は、 同じプロセスグループ ID を共有するプロセスの集まりである。 シェルは、一つのコマンドもしくはパイプラインの実行に使われるプロセス群に +対して一つのプロセスグループを生成する (例えば、コマンド "ls\ |\ wc" を実行するために生成される二つのプロセスは +同じプロセスグループに置かれる)。 所属するプロセスグループは \fBsetpgid\fP(2) を使って設定できる。 自身のプロセス ID +がプロセスグループ ID と同じプロセスは、 そのグループの「プロセスグループ・リーダー」である。 + +セッションは、同じセッション ID を共有するプロセスの集まりである。 ある一つのプロセスグループの全メンバーは同じセッション ID を持つ +(つまり、一つのプロセスグループのメンバーは全て同じセッションに所属し、 これにより、セッションとプロセスグループで二階層のプロセス階層が形成できる)。 +新たなセッションの生成はプロセスが \fBsetsid\fP(2) を呼び出すことで行う。 \fBsetsid\fP(2) は、 \fBsetsid\fP(2) +を呼び出したプロセスの PID と同じ値のセッション ID を持つ 新たなセッションを生成する。 +セッションの生成者は「セッション・リーダー」と呼ばれる。 +.SS "ユーザ ID とグループ ID" +各プロセスは、数種類のユーザ ID とグループ ID を持つ。 ユーザ ID、グループ ID は整数で、それぞれ \fIuid_t\fP, \fIgid_t\fP +型で表現される (これらは \fI\fP で定義されている)。 + +Linux では、各プロセスは以下のような種類のユーザ ID とグループ ID を持つ。 +.IP * 3 +実ユーザ ID と実グループ ID。 これらの ID によりプロセスの所有者が決定される。 プロセスが自分の実ユーザ ID、実グループ ID +を取得するには、それぞれ \fBgetuid\fP(2), \fBgetgid\fP(2) を使用する。 +.IP * +実効ユーザ ID と実効グループ ID。 これらの ID は、メッセージキュー、共有メモリ、セマフォなどの +共有リソースにアクセスしようとした際にそのプロセスがアクセス許可を 持っているかをカーネルが判定するのに使用される。 ほとんどの UNIX +システムでは、これらの ID はファイルへのアクセス時の アクセス許可の判定にも使用される。 しかしながら、Linux +ではファイルへのアクセス許可の判定には 後述のファイルシステム ID が使用される。 プロセスが自分の実効ユーザ ID、実効グループ ID +を取得するには、それぞれ \fBgeteuid\fP(2), \fBgetegid\fP(2) を使用する。 +.IP * +保存 (saved) set\-user\-ID と保存 set\-group\-ID。 これらの ID は、set\-user\-ID や +set\-group\-ID されたプログラムにおいて、 プログラムの実行時に設定された実効 ID のコピーを保存するために 使用される +(\fBexecve\fP(2) 参照)。 set\-user\-ID プログラムは、実効ユーザ ID を実ユーザID と保存 set\-user\-ID +の間で行ったり来たり切り替えることで、特権を得たり落としたりできる。 この切り替えは \fBseteuid\fP(2), \fBsetreuid\fP(2), +\fBsetresuid\fP(2) を呼び出すことで実行できる。 set\-group\-ID プログラムは、 \fBsetegid\fP(2), +\fBsetregid\fP(2), \fBsetresgid\fP(2) を使って同様のことができる。 プロセスが自分の保存 set\-user\-ID、保存 +set\-group\-ID を取得するには、 \fBgetresuid(2),\fP \fBgetresgids\fP(2) をそれぞれ使用する。 +.IP * +ファイルシステム・ユーザ ID とファイルシステム・グループ ID (Linux 固有)。 これらの ID は、後述の補助グループ ID +と組み合わせて使用され、 ファイルへのアクセス権の決定に利用される。詳細は \fBpath_resolution\fP(7) を参照。 プロセスの実効 ID +(ユーザ ID や グループ ID) が変更されるたびに、 カーネルは自動的に対応するファイルシステム ID を同じ値に変更する。 +その結果、ファイルシステム ID は通常は対応する実効 ID と同じ値となり、 ファイルのアクセス権のチェック方法は Linux と他の UNIX +システムで同じである。 ファイルシステム ID は実効 ID とは異なる値にすることができ、 変更は \fBsetfsuid\fP(2) と +\fBsetfsgid\fP(2) を呼び出して行う。 +.IP * +.\" Since kernel 2.6.4, the limit is visible via the read-only file +.\" /proc/sys/kernel/ngroups_max. +.\" As at 2.6.22-rc2, this file is still read-only. +補助グループ ID。 この ID は、ファイルや他の共有リソースへのアクセス時にアクセス許可の チェックに使用される、追加のグループ ID +の集合である。 カーネル 2.6.4 より前の Linux では、一つのプロセスあたりの 補助グループのメンバー数は最大で 32 である。 カーネル +2.6.4 以降では、一つのプロセスあたりの 補助グループのメンバー数は最大で 65536 である。 +\fIsysconf(_SC_NGROUPS_MAX)\fP を呼び出すことで、あるプロセスがメンバーとなることができる可能性のある +補助グループ数を知ることができる。 プロセスは、自分の補助グループ ID の集合を \fBgetgroups\fP(2) で取得でき、 +\fBsetgroups\fP(2) で集合を変更できる。 +.PP +\fBfork\fP(2) で生成された子プロセスは親プロセスのユーザ ID とグループ ID を継承する。 \fBexecve\fP(2) +の間、プロセスの実ユーザ/グループ ID と補助グループ ID 集合は不変である。 実効 ID と保存セット ID は変更される可能性がある +(\fBexecve\fP(2) で説明されている)。 + +上記の目的以外にも、プロセスのユーザ ID は他の様々な場面で利用される。 +.IP * 3 +シグナルを送る許可の判定時\(em \fBkill\fP(2) 参照。 +.IP * +プロセスのスケジューリング関連のパラメータ (nice 値、 リアルタイム・スケジューリングポリシーや優先度、CPU affinity、 入出力優先度) +の設定許可の判定時。 スケジューリング関連のパラメータ設定には \fBsetpriority\fP(2), \fBsched_setaffinity\fP(2), +\fBsched_setscheduler\fP(2), \fBsched_setparam\fP(2), \fBioprio_set\fP(2) が使用される。 +.IP * +リソース上限のチェック時。 \fBgetrlimit\fP(2) 参照。 +.IP * +プロセスが生成できる inotify インスタンス数の上限のチェック時。 \fBinotify\fP(7) 参照。 +.SH 準拠 +プロセス ID、親プロセス ID、プロセスグループ ID、セッション ID は POSIX.1\-2001 で規定されている。 実 ID、実効 +ID、保存セット ID のユーザ ID / グループ ID および 補助グループ ID は POSIX.1\-2001 で規定されている。 +ファイルシステム・ユーザ ID / グループ ID は Linux による拡張である。 +.SH 注意 +POSIX のスレッド仕様では、これらの識別子がプロセス内の全スレッドで 共有されることを求めている。 しかしながら、カーネルのレベルでは、Linux +はスレッド毎に別々の ユーザとグループに関する識別子を管理している。 NPTL スレッド実装が、(例えば \fBsetuid\fP(2), +\fBsetresuid\fP(2) などの呼び出しによる) ユーザやグループに関する識別子に対する変更が プロセス内の全ての POSIX +スレッドに対して反映されることを保証する ための処理を行っている。 +.SH 関連項目 +\fBbash\fP(1), \fBcsh\fP(1), \fBps\fP(1), \fBaccess\fP(2), \fBexecve\fP(2), +\fBfaccessat\fP(2), \fBfork\fP(2), \fBgetpgrp\fP(2), \fBgetpid\fP(2), \fBgetppid\fP(2), +\fBgetsid\fP(2), \fBkill\fP(2), \fBkillpg\fP(2), \fBsetegid\fP(2), \fBseteuid\fP(2), +\fBsetfsgid\fP(2), \fBsetfsuid\fP(2), \fBsetgid\fP(2), \fBsetgroups\fP(2), +\fBsetresgid\fP(2), \fBsetresuid\fP(2), \fBsetuid\fP(2), \fBwaitpid\fP(2), +\fBeuidaccess\fP(3), \fBinitgroups\fP(3), \fBtcgetpgrp\fP(3), \fBtcsetpgrp\fP(3), +\fBcapabilities\fP(7), \fBpath_resolution\fP(7), \fBunix\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man7/signal.7 b/draft/man7/signal.7 new file mode 100644 index 00000000..15b04433 --- /dev/null +++ b/draft/man7/signal.7 @@ -0,0 +1,576 @@ +.\" t +.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de) +.\" and Copyright (c) 2002, 2006 by Michael Kerrisk +.\" and Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk +.\" +.\" +.\" %%%LICENSE_START(VERBATIM) +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.\" Modified Sat Jul 24 17:34:08 1993 by Rik Faith (faith@cs.unc.edu) +.\" Modified Sun Jan 7 01:41:27 1996 by Andries Brouwer (aeb@cwi.nl) +.\" Modified Sun Apr 14 12:02:29 1996 by Andries Brouwer (aeb@cwi.nl) +.\" Modified Sat Nov 13 16:28:23 1999 by Andries Brouwer (aeb@cwi.nl) +.\" Modified 10 Apr 2002, by Michael Kerrisk +.\" Modified 7 Jun 2002, by Michael Kerrisk +.\" Added information on real-time signals +.\" Modified 13 Jun 2002, by Michael Kerrisk +.\" Noted that SIGSTKFLT is in fact unused +.\" 2004-12-03, Modified mtk, added notes on RLIMIT_SIGPENDING +.\" 2006-04-24, mtk, Added text on changing signal dispositions, +.\" signal mask, and pending signals. +.\" 2008-07-04, mtk: +.\" Added section on system call restarting (SA_RESTART) +.\" Added section on stop/cont signals interrupting syscalls. +.\" 2008-10-05, mtk: various additions +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH SIGNAL 7 2012\-05\-01 Linux "Linux Programmer's Manual" +.SH 名前 +signal \- シグナルの概要 +.SH 説明 +Linux は POSIX 信頼シグナル (reliable signal; 以後 "標準シグナル"と表記) と POSIX +リアルタイムシグナルの両方に対応している。 +.SS シグナル処理方法 +シグナルはそれぞれ現在の「処理方法 (disposition)」を保持しており、 この処理方法によりシグナルが配送された際にプロセスが +どのような振舞いをするかが決まる。 + +後述の表の "動作" の欄のエントリは各シグナルのデフォルトの 処理方法を示しており、以下のような意味を持つ。 +.IP Term +デフォルトの動作はプロセス終了。 +.IP Ign +デフォルトの動作はこのシグナルの無視。 +.IP Core +デフォルトの動作はプロセス終了とコアダンプ出力 (\fBcore\fP(5) 参照)。 +.IP Stop +デフォルトの動作はプロセスの一時停止。 +.IP Cont +デフォルトの動作は、プロセスが停止中の場合にその実行の再開。 +.PP +プロセスは、 \fBsigaction\fP(2) や \fBsignal\fP(2) を使って、シグナルの処理方法を変更することができる +(\fBsignal\fP(2) の方がシグナルハンドラを設定する際の移植性が低い; 詳細は \fBsignal\fP(2) を参照)。 +シグナルの配送時に起こる動作として プロセスが選択できるのは、次のいずれか一つである。 デフォルトの動作を実行する、シグナルを無視する、 +\fIシグナルハンドラ (signal handler)\fP でシグナルを捕捉する。シグナルハンドラとは、シグナル配送時に +自動的に起動されるプログラマ定義の関数である。 (デフォルトでは、シグナルハンドラは通常のプロセスのスタック上で起動される。 +シグナルハンドラが代替スタック (alternate stack) を使用するように設定する +こともできる。代替スタックを使用するように設定する方法と、どのような際に 代替スタックが役に立つかについての議論については +\fBsigaltstack\fP(2) を参照のこと。 + +シグナルの処理方法はプロセス単位の属性である。 マルチスレッドのアプリケーションでは、あるシグナルの処理方法は 全てのスレッドで同じである。 + +\fBfork\fP(2) 経由で作成された子プロセスは、親プロセスのシグナルの処理方法の コピーを継承する。 +\fBexecve\fP(2) の前後で、ハンドラが設定されているシグナルの処理方法はデフォルトにリセットされ、 +無視が設定されているシグナルの処理方法は変更されずそのままとなる。 +.SS シグナルの送信 +以下のシステムコールとライブラリ関数を使って、 呼び出し者はシグナルを送信することができる。 +.TP 16 +\fBraise\fP(3) +呼び出したスレッドにシグナルを送る。 +.TP +\fBkill\fP(2) +指定されたプロセスや、指定されたプロセスグループの全メンバー、 システムの全プロセスにシグナルを送る。 +.TP +\fBkillpg\fP(2) +指定されたプロセスグループの全メンバーにシグナルを送る。 +.TP +\fBpthread_kill\fP(3) +呼び出し者と同じプロセス内の指定された POSIX スレッドにシグナルを送る。 +.TP +\fBtgkill\fP(2) +指定されたプロセス内の指定されたスレッドにシグナルを送る (このシステムコールを使って \fBpthread_kill\fP(3) は実装されている)。 +.TP +\fBsigqueue\fP(3) +指定されたプロセスに付属データとともにリアルタイムシグナルを送る。 +.SS シグナルが捕捉されるのを待つ +以下のシステムコールを使って、シグナルが捕捉されるまで 呼び出したプロセスやスレッドの実行を中断 (suspend) することができる +(ハンドラが設定されていないシグナルによりそのプロセスが終了した 場合にも実行の停止は終了する)。 +.TP 16 +\fBpause\fP(2) +何かシグナルが捕捉されるまで実行を停止する。 +.TP +\fBsigsuspend\fP(2) +一時的にシグナルマスク (下記参照) を変更し、 マスクされていないシグナルのいずれかが捕捉されるまで 実行を中断する。 +.SS シグナルの同期受信 +シグナルハンドラ経由でシグナルを非同期 (asynchronously) で捕捉する以外にも、 シグナルを同期 (synchronously) +して受け付けることもできる。 同期して受け付けるとは、シグナルが配送されるまで実行を停止 (block) +するということである。シグナルを受け付けた際に、カーネルは そのシグナルに関する情報を呼び出し者に返す。 これを行う一般的な方法が二つある。 +.IP * 2 +\fBsigwaitinfo\fP(2), \fBsigtimedwait\fP(2), \fBsigwait\fP(3) +は、指定されたシグナル集合のシグナルの一つが配送されるまで実行を中断する。 どのシステムコールや関数でも、配送されたシグナルに関する情報が返される。 +.IP * +\fBsignalfd\fP(2) が返すファイルディスクリプタを使うと、呼び出し元に配送された シグナルに関する情報を読み出すことができる。 +このファイルディスクリプタからの \fBread\fP(2) は、 \fBsignalfd\fP(2) +の呼び出し時に指定されたシグナル集合のシグナルの一つが呼び出し元に 配送されるまで停止 (block) する。 \fBread\fP(2) +が返すバッファにはシグナルに関する情報を格納した構造体が入っている。 +.SS シグナルマスクと処理待ちシグナル +シグナルは \fIブロック (block)\fP されることがある。ブロックされると、そのシグナルは その後ブロックを解除されるまで配送されなくなる。 +シグナルが生成されてから配送されるまでの間、そのシグナルは \fI処理待ち (pending)\fP であると呼ばれる。 + +プロセス内の各スレッドは、それぞれ独立な \fIシグナルマスク (signal mask)\fP を持つ。シグナルマスクはそのスレッドが現在ブロックしている +シグナル集合を示すものである。 スレッドは、 \fBpthread_sigmask\fP(3) を使って自分のシグナルマスクを操作できる。 +伝統的なシングルスレッドのアプリケーションでは、 \fBsigprocmask\fP(2) を使って、シグナルマスクを操作できる。 + +\fBfork\fP(2) 経由で作成された子プロセスは親プロセスのシグナルマスクのコピーを継承する。 \fBexecve\fP(2) +の前後でシグナルマスクは保持される。 + +生成されるシグナル (したがって処理待ちとなるシグナル) には、 プロセス全体宛てと特定のスレッド宛てがある。 例えば、プロセス全体宛てのシグナルは +\fBkill\fP(2) を使って送信される。 特定のマシン語の命令の実行の結果として生成される、 \fBSIGSEGV\fP や \fBSIGFPE\fP +などのシグナルは、スレッド宛てとなる。 また、 \fBpthread_kill\fP(3) を使って特定のスレッド宛てに生成されたシグナルも +スレッド宛てとなる。 プロセス宛てのシグナルは、そのシグナルをブロックしていないスレッドのうち +いずれかの一つに配送することができる。そのシグナルをブロックしていない スレッドが複数ある場合、シグナルを配送するスレッドはカーネルが +無作為に選択する。 + +スレッドは、 \fBsigpending\fP(2) を使って、現在処理待ちのシグナル集合を取得することができる。 +この集合は、プロセス宛ての処理待ちシグナルと 呼び出したスレッド宛てのシグナルの両方から構成される。 + +\fBfork\fP(2) 経由で作成された子プロセスでは、処理待ちのシグナル集合は空の集合で初期化される。 \fBexecve\fP(2) +の前後で、処理待ちのシグナル集合は保持される。 +.SS 標準シグナル +Linux は以下に示す標準シグナルに対応している。シグナル番号の一部はアー +キテクチャ依存であり、"値" 欄に示す通りである。 (3つの値が書かれている +ものは、 1つ目が alpha と sparc で通常有効な値、 真ん中が x86, arm や +他のほとんどのアーキテクチャでの有効な値、最後が mips での値である。 +(parisc での値は記載されて\fIいない\fP。 parisc でのシグナル番号は +Linux カーネルソースを参照してほしい)。 \- はそのアーキテ +クチャにおいて対応するシグナルがないことを示す。) + +最初に、POSIX.1\-1990 に定義されているシグナルを示す。 +.TS +l c c l +____ +lB c c l. +シグナル 値 動作 コメント +SIGHUP \01 Term 制御端末(controlling terminal)のハングアップ検出、 + または制御しているプロセスの死 +SIGINT \02 Term キーボードからの割り込み (Interrupt) +SIGQUIT \03 Core キーボードによる中止 (Quit) +SIGILL \04 Core 不正な命令 +SIGABRT \06 Core \fBabort\fP(3) からの中断 (Abort) シグナル +SIGFPE \08 Core 浮動小数点例外 +SIGKILL \09 Term Kill シグナル +SIGSEGV 11 Core 不正なメモリ参照 +SIGPIPE 13 Term パイプ破壊: + 読み手の無いパイプへの書き出し +SIGALRM 14 Term \fBalarm\fP(2) からのタイマーシグナル +SIGTERM 15 Term 終了 (termination) シグナル +SIGUSR1 30,10,16 Term ユーザ定義シグナル 1 +SIGUSR2 31,12,17 Term ユーザ定義シグナル 2 +SIGCHLD 20,17,18 Ign 子プロセスの一時停止 (stop) または終了 +SIGCONT 19,18,25 Cont 一時停止 (stop) からの再開 +SIGSTOP 17,19,23 Stop プロセスの一時停止 (stop) +SIGTSTP 18,20,24 Stop 端末より入力された一時停止 (stop) +SIGTTIN 21,21,26 Stop バックグランドプロセスの端末入力 +SIGTTOU 22,22,27 Stop バックグランドプロセスの端末出力 +.TE + +シグナル \fBSIGKILL\fP と \fBSIGSTOP\fP はキャッチ、ブロック、無視できない。 + +次に、 POSIX.1\-1990 標準にはないが、 SUSv2 と POSIX.1\-2001 に記述されているシグナルを示す。 +.TS +l c c l +____ +lB c c l. +シグナル 値 動作 コメント +SIGBUS 10,7,10 Core バスエラー (不正なメモリアクセス) +SIGPOLL Term ポーリング可能なイベント (Sys V)。 + \fBSIGIO\fP と同義 +SIGPROF 27,27,29 Term profiling タイマの時間切れ +SIGSYS 12,31,12 Core ルーチンへの引き数が不正 (SVr4) +SIGTRAP 5 Core トレース/ブレークポイント トラップ +SIGURG 16,23,21 Ign ソケットの緊急事態 (urgent condition) (4.2BSD) +SIGVTALRM 26,26,28 Term 仮想アラームクロック (4.2BSD) +SIGXCPU 24,24,30 Core CPU時間制限超過 (4.2BSD) +SIGXFSZ 25,25,31 Core ファイルサイズ制限の超過 (4.2BSD) +.TE + +Linux 2.2 以前では、 \fBSIGSYS\fP, \fBSIGXCPU\fP, \fBSIGXFSZ\fP および SPARC と MIPS +以外のアーキテクチャでの \fBSIGBUS\fP のデフォルトの振る舞いは (コアダンプ出力なしの) プロセス終了であった。 (他の UNIX システムにも +\fBSIGXCPU\fP と \fBSIGXFSZ\fP のデフォルトの動作がコアダンプなしのプロセス終了のものがある。) Linux 2.4 +では、POSIX.1\-2001 での要求仕様に準拠して、 これらのシグナルで、プロセスを終了させ、コアダンプを出力する ようになっている。 + +次にその他の各種シグナルを示す。 +.TS +l c c l +____ +lB c c l. +シグナル 値 動作 コメント +SIGIOT 6 Core IOT トラップ。\fBSIGABRT\fP と同義 +SIGEMT 7,\-,7 Term +SIGSTKFLT \-,16,\- A 数値演算プロセッサにおけるスタックフォルト (未使用) +SIGIO 23,29,22 Term 入出力が可能になった (4.2BSD) +SIGCLD \-,\-,18 Ign \fBSIGCHLD\fP と同義 +SIGPWR 29,30,19 Term 電源喪失 (Power failure) (System V) +SIGINFO 29,\-,\- \fBSIGPWR\fP と同義 +SIGLOST \-,\-,\- Term ファイルロックが失われた (未使用) +SIGWINCH 28,28,20 Ign ウィンドウ リサイズ シグナル (4.3BSD, Sun) +SIGUNUSED \-,31,\- Core \fBSIGSYS\fP と同義 +.TE + +(シグナル 29 は alpha では \fBSIGINFO\fP / \fBSIGPWR\fP だが、sparc では \fBSIGLOST\fP である。) + +\fBSIGEMT\fP は POSIX.1\-2001 に規定されていないが、 その他の多くの UNIX システムに存在する。 +デフォルトの動作は多くの場合、コアダンプ出力を伴うプロセスの終了である。 + +\fBSIGPWR\fP は (POSIX.1\-2001 に規定されていないが) このシグナルが存在する 他の UNIX +システムでは多くの場合、デフォルト動作は無視である。 + +\fBSIGIO\fP は (POSIX.1\-2001 に規定されていないが) いくつかの他の UNIX システムでは デフォルト動作は無視である。 + +.\" parisc is the only exception: SIGSYS is 12, SIGUNUSED is 31 +\fBSIGUNUSED\fP が定義されている場合には、ほとんどのアーキテクチャで \fBSIGSYS\fP の同義語となっている。 +.SS リアルタイムシグナル +Linux はリアルタイムシグナルをサポートしている。 リアルタイムシグナルは元々 POSIX.1b のリアルタイム拡張で定義されて +いるものであり、現在では POSIX.1\-2001 に含まれている。 対応しているリアルタイムシグナルの範囲は、マクロ \fBSIGRTMIN\fP と +\fBSIGRTMAX\fP で定義される。 POSIX.1\-2001 では、少なくとも \fB_POSIX_RTSIG_MAX\fP (8) +個のリアルタイムシグナルに対応した実装が要求されている。 +.PP +Linux は、32 個の異なるリアルタイムシグナルに対応しており、 その番号は 33 から 64 である。 しかしながら、glibc の POSIX +スレッド実装は、 内部で 2個 (NPTL の場合) か 3個 (LinuxThreads の場合) の リアルタイムシグナルを使用しており +(\fBpthreads\fP(7) 参照)、 \fBSIGRTMIN\fP の値を適切に (34 か 35 に) 調整する。 +利用可能なリアルタイムシグナルの範囲は glibc のスレッド実装により 異なるし (使用するカーネルと glibc により実行時にも変化する)、 +UNIX システムの種類によっても異なる。したがって、 プログラムでは「ハードコーディングした数字を使ってのリアルタイムシグナルの +参照は決してすべきではなく」、代わりに \fBSIGRTMIN\fP+n の形で参照すべきである。また、 \fBSIGRTMIN\fP+n が +\fBSIGRTMAX\fP を超えていないかのチェックを (実行時に) 適切に行うべきである。 +.PP +標準シグナルと異なり、リアルタイムシグナルには 事前に定義された意味はない。 リアルタイムシグナルの全部をアプリケーションで定義した用途に使える。 +.PP +ハンドリングしないリアルタイムシグナルのデフォルトの動作は 受信したプロセスの終了である。 +.PP +リアルタイムシグナルは以下の特徴がある: +.IP 1. 4 +リアルタイムシグナルは複数の実体をキューに入れることができる。 一方、標準シグナルの場合、そのシグナルがブロックされている間に +同じシグナルの複数のインスタンスが配送されても、 1 つだけがキューに入れられる。 +.IP 2. 4 +シグナルが \fBsigqueue\fP(3) を用いて送信された場合、 付属データ (整数かポインタ) をシグナルと共に送信できる。 受信側プロセスが +\fBsigaction\fP(2) に \fBSA_SIGINFO\fP フラグを指定してシグナルハンドラを設定した場合、 このデータは +\fIsiginfo_t\fP 構造体の \fIsi_value\fP フィールド経由でハンドラの第 2 引き数として渡され、 利用することができる。 +さらに、この構造体の \fIsi_pid\fP と \fIsi_uid\fP フィールドでシグナルを送信したプロセスの PID と実ユーザ ID を +得ることができる。 +.IP 3. 4 +リアルタイムシグナルでは配送される順序が保証される。 同じタイプのリアルタイムシグナルは送信された順番に到着する。 +異なるリアルタイムシグナルが一つのプロセスに送信された場合、 番号の小さいシグナルから先に到着する。 +(つまり小さい番号のシグナルが高い優先順位を持つ。) 対照的に、一つのプロセスに対して複数の標準シグナルが処理待ちとなった場合、 +これらのシグナルが配送される順序は不定である。 +.PP +一つのプロセスに対して標準シグナルとリアルタイムシグナルの両方が 処理待ちの場合、POSIX はどちらが先に配送されるかを規定していない。 Linux +では、他の多くの実装と同様、このような場合には 標準シグナルが優先される。 +.PP +POSIX によれば、1 プロセス毎に最低 \fB_POSIX_SIGQUEUE_MAX\fP (32) +個のリアルタイムシグナルをキューに入れられるべきとしている。 しかし、 Linux では違った実装になっている。カーネル 2.6.7 までは +(2.6.7 を含む)、全プロセスでキューに入っているリアルタイムシグナル の数の合計についてシステム全体での制限がある。 この制限は +\fI/proc/sys/kernel/rtsig\-max\fP ファイルで見ることができ、 (権限があれば) 変更もできる。 関係するファイルとして、 +\fI/proc/sys/kernel/rtsig\-nr\fP を見ることで、いくつのリアルタイムシグナルが現在キューに入っているかを 知ることができる。 +Linux 2.6.8 で、これらの \fI/proc\fP 経由のインターフェースは、 \fBRLIMIT_SIGPENDING\fP +リソース制限に置き換えられた。 これは、キューに入るシグナル数に関してユーザ単位に 上限を指定するものである。 詳しくは \fBsetrlimit\fP(2) +を参照。 +.SS "非同期シグナルで安全な関数 (async\-signal\-safe functions)" +.PP +シグナルハンドラ関数には非常に注意しなければならない。 他の場所の処理はプログラム実行の任意の箇所で中断される可能性があるためである。 POSIX +には「安全な関数 (safe function)」という概念がある。 シグナルが安全でない関数の実行を中断し、かつ \fIhandler\fP +が安全でない関数を呼び出した場合、プログラムの挙動は未定義である。 + +POSIX.1\-2004 (POSIX.1\-2001 Technical Corrigendum (正誤表) 2 とも言う) では、 +シグナルハンドラ内での安全な呼び出しを保証することが必須の関数として 以下が規定されている。 + +.in +4 +.nf +_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() +fdatasync() +fork() +fpathconf() +fstat() +fsync() +ftruncate() +getegid() +geteuid() +getgid() +getgroups() +getpeername() +getpgrp() +getpid() +getppid() +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() +sigfillset() +sigismember() +signal() +sigpause() +sigpending() +sigprocmask() +sigqueue() +sigset() +sigsuspend() +sleep() +sockatmark() +socket() +socketpair() +stat() +symlink() +sysconf() +tcdrain() +tcflow() +tcflush() +tcgetattr() +tcgetpgrp() +tcsendbreak() +tcsetattr() +tcsetpgrp() +time() +timer_getoverrun() +timer_gettime() +timer_settime() +times() +umask() +uname() +unlink() +utime() +wait() +waitpid() +write() +.fi +.in +.PP +POSIX.1\-2008 では、上記のリストのうち fpathconf(), pathconf(), sysconf() +が削除され、以下の関数が追加された。 +.PP +.in +4n +.nf +execl() +execv() +faccessat() +fchmodat() +fchownat() +fexecve() +fstatat() +futimens() +linkat() +mkdirat() +mkfifoat() +mknod() +mknodat() +openat() +readlinkat() +renameat() +symlinkat() +unlinkat() +utimensat() +utimes() +.fi +.in +.SS シグナルハンドラによるシステムコールやライブラリ関数への割り込み +システムコールやライブラリが停止 (block) している間にシグナルハンドラが 起動されると、以下のどちらかとなる。 +.IP * 2 +シグナルが返った後、呼び出しは自動的に再スタートされる。 +.IP * +呼び出しはエラー \fBEINTR\fP で失敗する。 +.PP +これらの二つの挙動のうちどちらが起こるかは、インターフェイスにより依存し、 シグナルハンドラが \fBSA_RESTART\fP フラグ +(\fBsigaction\fP(2) 参照) を使って設定されていたかにも依存する。 詳細は UNIX システムによって異なる。 Linux +における詳細を以下で説明する。 + +.\" The following system calls use ERESTARTSYS, +.\" so that they are restartable +以下のインターフェイスのいずれかの呼び出しが停止している間に シグナルハンドラにより割り込まれた場合、 \fBSA_RESTART\fP +フラグが使用されていれば、シグナルハンドラが返った後に その呼び出しは自動的に再スタートされることになる。 それ以外の場合は、その呼び出しはエラー +\fBEINTR\fP で失敗することになる。 +.RS 4 +.IP * 2 +\fBread\fP(2), \fBreadv\fP(2), \fBwrite\fP(2), \fBwritev\fP(2), \fBioctl\fP(2) の「遅い +(slow)」デバイスに対する呼び出し。 ここでいう「遅い」デバイスとは、I/O 呼び出しが無期限に停止 (block) する +可能性のあるデバイスのことで、例としては端末、パイプ、ソケットがある (この定義では、ディスクは遅いデバイスではない)。 遅いデバイスに対する I/O +呼び出しが、 シグナルハンドラにより割り込まれた時点までに何らかのデータを すでに転送していれば、呼び出しは成功ステータス +(通常は、転送されたバイト数) を返すことだろう。 +.IP * +停止 (block) する可能性のある \fBopen\fP(2) (例えば、FIFO のオープン時; \fBfifo\fP(7) 参照)。 +.IP * +\fBwait\fP(2), \fBwait3\fP(2), \fBwait4\fP(2), \fBwaitid\fP(2), \fBwaitpid\fP(2). +.IP * +.\" If a timeout (setsockopt()) is in effect on the socket, then these +.\" system calls switch to using EINTR. Consequently, they and are not +.\" automatically restarted, and they show the stop/cont behavior +.\" described below. (Verified from 2.6.26 source, and by experiment; mtk) +ソケットインターフェイス: \fBaccept\fP(2), \fBconnect\fP(2), \fBrecv\fP(2), \fBrecvfrom\fP(2), +\fBrecvmsg\fP(2), \fBsend\fP(2), \fBsendto\fP(2), \fBsendmsg\fP(2). +但し、ソケットにタイムアウトが設定されていない場合 (下記参照)。 +.IP * +ファイルロック用インターフェイス: \fBflock\fP(2), \fBfcntl\fP(2) \fBF_SETLKW\fP. +.IP * +POSIX メッセージキューインターフェイス: \fBmq_receive\fP(3), \fBmq_timedreceive\fP(3), +\fBmq_send\fP(3), \fBmq_timedsend\fP(3). +.IP * +\fBfutex\fP(2) \fBFUTEX_WAIT\fP (Linux 2.6.22 以降; それ以前は常に \fBEINTR\fP で失敗していた)。 +.IP * +POSIX セマフォインターフェイス: \fBsem_wait\fP(3), \fBsem_timedwait\fP(3) (Linux 2.6.22 以降; +それ以前は常に \fBEINTR\fP で失敗していた)。 +.RE +.PP +.\" These are the system calls that give EINTR or ERESTARTNOHAND +.\" on interruption by a signal handler. +以下のインターフェイスは、 \fBSA_RESTART\fP を使っているどうかに関わらず、シグナルハンドラにより割り込まれた後、 +再スタートすることは決してない。 これらは、シグナルハンドラにより割り込まれると、常にエラー \fBEINTR\fP で失敗する。 +.RS 4 +.IP * 2 +\fBsetsockopt\fP(2) を使ってタイムアウトが設定されているソケットインターフェース: \fBaccept\fP(2), \fBrecv\fP(2), +\fBrecvfrom\fP(2), \fBrecvmsg\fP(2) で受信タイムアウト (\fBSO_RCVTIMEO\fP) が設定されている場合と、 +\fBconnect\fP(2), \fBsend\fP(2), \fBsendto\fP(2), \fBsendmsg\fP(2) で送信タイムアウト +(\fBSO_SNDTIMEO\fP) が設定されている場合。 +.IP * +シグナル待ちに使われるインターフェイス: \fBpause\fP(2), \fBsigsuspend\fP(2), \fBsigtimedwait\fP(2), +\fBsigwaitinfo\fP(2). +.IP * +ファイルディスクリプタ多重インターフェイス: \fBepoll_wait\fP(2), \fBepoll_pwait\fP(2), \fBpoll\fP(2), +\fBppoll\fP(2), \fBselect\fP(2), \fBpselect\fP(2). +.IP * +.\" On some other systems, SA_RESTART does restart these system calls +System V IPC インターフェイス: \fBmsgrcv\fP(2), \fBmsgsnd\fP(2), \fBsemop\fP(2), +\fBsemtimedop\fP(2). +.IP * +スリープ用のインターフェイス: \fBclock_nanosleep\fP(2), \fBnanosleep\fP(2), \fBusleep\fP(3). +.IP * +\fBinotify\fP(7) ファイルディスクリプタからの \fBread\fP(2). +.IP * +\fBio_getevents\fP(2). +.RE +.PP +\fBsleep\fP(3) 関数も、ハンドラにより割り込まれた場合、決して再スタートされることはない。 しかし、成功となり、残っている停止時間を返す。 +.SS 一時停止シグナルによるシステムコールやライブラリ関数への割り込み +Linux では、シグナルハンドラが設定されていない場合でも、 いくつかのブロッキング型のインターフェイスは、 プロセスが一時停止 (stop) +シグナルの一つにより停止され、 \fBSIGCONT\fP により再開された後に、エラー \fBEINTR\fP で失敗する可能性がある。 この挙動は +POSIX.1 で認められておらず、他のシステムでは起こらない。 + +この挙動を示す Linux のインターフェイスは以下の通りである。 +.RS 4 +.IP * 2 +\fBsetsockopt\fP(2) を使ってタイムアウトが設定されているソケットインターフェース: \fBaccept\fP(2), \fBrecv\fP(2), +\fBrecvfrom\fP(2), \fBrecvmsg\fP(2) で受信タイムアウト (\fBSO_RCVTIMEO\fP) が設定されている場合と、 +\fBconnect\fP(2), \fBsend\fP(2), \fBsendto\fP(2), \fBsendmsg\fP(2) で送信タイムアウト +(\fBSO_SNDTIMEO\fP) が設定されている場合。 +.IP * 2 +\fBepoll_wait\fP(2), \fBepoll_pwait\fP(2). +.IP * +\fBsemop\fP(2), \fBsemtimedop\fP(2). +.IP * +\fBsigtimedwait\fP(2), \fBsigwaitinfo\fP(2). +.IP * +\fBinotify\fP(7) ファイルディスクリプタからの \fBread\fP(2). +.IP * +Linux 2.6.21 以前: \fBfutex\fP(2) \fBFUTEX_WAIT\fP, \fBsem_timedwait\fP(3), +\fBsem_wait\fP(3). +.IP * +Linux 2.6.8 以前: \fBmsgrcv\fP(2), \fBmsgsnd\fP(2). +.IP * +Linux 2.4 以前: \fBnanosleep\fP(2). +.RE +.SH 準拠 +.\" It must be a *very* long time since this was true: +.\" .SH BUGS +.\" .B SIGIO +.\" and +.\" .B SIGLOST +.\" have the same value. +.\" The latter is commented out in the kernel source, but +.\" the build process of some software still thinks that +.\" signal 29 is +.\" .BR SIGLOST . +POSIX.1 (注記した内容以外)。 +.SH 関連項目 +\fBkill\fP(1), \fBgetrlimit\fP(2), \fBkill\fP(2), \fBkillpg\fP(2), +\fBrt_sigqueueinfo\fP(2), \fBsetitimer\fP(2), \fBsetrlimit\fP(2), \fBsgetmask\fP(2), +\fBsigaction\fP(2), \fBsigaltstack\fP(2), \fBsignal\fP(2), \fBsignalfd\fP(2), +\fBsigpending\fP(2), \fBsigprocmask\fP(2), \fBsigsuspend\fP(2), \fBsigwaitinfo\fP(2), +\fBabort\fP(3), \fBbsd_signal\fP(3), \fBlongjmp\fP(3), \fBraise\fP(3), +\fBpthread_sigqueue\fP(3), \fBsigqueue\fP(3), \fBsigset\fP(3), \fBsigsetops\fP(3), +\fBsigvec\fP(3), \fBsigwait\fP(3), \fBstrsignal\fP(3), \fBsysv_signal\fP(3), \fBcore\fP(5), +\fBproc\fP(5), \fBpthreads\fP(7), \fBsigevent\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/release/man2/capget.2 b/release/man2/capget.2 index ba9bb838..b0e63874 100644 --- a/release/man2/capget.2 +++ b/release/man2/capget.2 @@ -35,11 +35,9 @@ Linux 2.2 で、スーパーユーザー (root) の権限は、個別のケー \fBexecve\fP(2) を通じて渡すことができるケーパビリティの集合であり、 「許可ケーパビリティ (permitted capability) の集合」は 実効ケーパビリティや継承可能ケーパビリティとして有効にできる ケーパビリティを規定するものである。 .PP -These two system calls are the raw kernel interface for getting and setting -thread capabilities. Not only are these system calls specific to Linux, but -the kernel API is likely to change and use of these system calls (in -particular the format of the \fIcap_user_*_t\fP types) is subject to extension -with each kernel revision, but old programs will keep working. +この二つのシステムコールはスレッドのケーパビリティを取得したり設定したりするための 生のカーネルインターフェースである。 これらのシステムコールは +Linux 特有であるというだけでなく、 カーネル API は変更されるかもしれず、これらのシステムコールの使用法 (特に +\fIcap_user_*_t\fP 型という書式) はカーネルのリビジョン毎に拡張されるかもしれないが、 以前のプログラムはそのまま動作する。 .sp 移植性のあるインターフェースは \fBcap_set_proc\fP(3) と \fBcap_get_proc\fP(3) である。 可能ならばアプリケーションはこれらの関数を使用すべきである。 アプリケーションに Linux 拡張を使用したい場合には、より簡単に @@ -68,12 +66,11 @@ typedef struct __user_cap_data_struct { .fi .in -4n .sp -The \fIeffective\fP, \fIpermitted\fP, and \fIinheritable\fP fields are bit masks of -the capabilities defined in \fIcapability(7).\fP Note the \fBCAP_*\fP values are -bit indexes and need to be bit\-shifted before ORing into the bit fields. To -define the structures for passing to the system call you have to use the -\fIstruct __user_cap_header_struct\fP and \fIstruct __user_cap_data_struct\fP -names because the typedefs are only pointers. +フィールド \fIeffective\fP, \fIpermitted\fP, \fIinheritable\fP は、 \fBcapability\fP(7) +で定義されるケーパビリティのビットマスクである。 \fICAP_*\fP はビット番号を表すインデックス値であり、 ビットフィールドに OR を行う前に +\fICAP_*\fP の値の分だけビットシフトを行う必要がある。 typedef の方はポインタなので、 このシステムコールに渡す構造体を定義するには、 +\fIstruct __user_cap_header_struct\fP と \fIstruct __user_cap_data_struct\fP +という名前を使用しなければならない。 カーネル 2.6.25 より前では、バージョン \fB_LINUX_CAPABILITY_VERSION_1\fP の 32 ビットケーパビリティが推奨である。 カーネル 2.6.25 以降では、バージョン \fB_LINUX_CAPABILITY_VERSION_2\fP の 64 @@ -86,12 +83,12 @@ names because the typedefs are only pointers. .sp \fBcapget\fP() では、 \fIhdrp\->pid\fP のフィールド値にケーパビリティを知りたいプロセスのプロセス ID を 指定することで、任意のプロセスのケーパビリティを調べることができる。 -.SS "With VFS capability support" +.SS "VFS ケーパビリティがサポートされている場合" VFS ケーパビリティのサポートでは、特権実行ファイルにケーパビリティを 追加するためのファイル属性メソッドが作成された。 この特権モデルの導入により、あるプロセスにより別のプロセスのケーパビリティ を非同期に設定する機能のカーネルによるサポートは廃止される。 つまり、VFS サポートでは、 \fBcapset\fP() を呼び出す際に \fIhdrp\->pid\fP の値として許されるのは 0 と \fBgetpid\fP(2) が返す値だけとなる (どちらの値でも等価である)。 -.SS "Without VFS capability support" +.SS "VFS ケーパビリティがサポートされていない場合" カーネルが VFS ケーパビリティをサポートしていない場合、 \fIhdrp\fP の \fIpid\fP フィールドが 0 以外であれば、 \fBcapset\fP() の操作対象は \fIpid\fP で指定されたスレッドのケーパビリティになる。 \fIpid\fP が 0 の場合は呼び出し元のスレッドのケーパビリティが操作対象となる。 \fIpid\fP がシングルスレッド・プロセスを参照している場合、 \fIpid\fP diff --git a/release/man2/clone.2 b/release/man2/clone.2 index a74ad3d2..ec22a150 100644 --- a/release/man2/clone.2 +++ b/release/man2/clone.2 @@ -104,7 +104,7 @@ wake (起床) させる。 このアドレスは \fBset_tid_address\fP(2) シ \fBCLONE_CHILD_SETTID\fP (Linux 2.5.49 以降) 子プロセスのメモリ内の \fIctid\fP が指す場所に子プロセスのスレッド ID を格納する。 .TP -\fBCLONE_FILES\fP (since Linux 2.0) +\fBCLONE_FILES\fP (Linux 2.0 以降) \fBCLONE_FILES\fP が設定された場合、呼び出し元のプロセスと子プロセスはファイルディスクリプタの テーブルを共有する。 呼び出し元プロセスとその子プロセスの一方が作成した ファイルディスクリプタは、もう一方においても有効である。 同じように、一方のプロセスがファイルディスクリプタを閉じたり、 (\fBfcntl\fP(2) \fBF_SETFD\fP 操作を使って) @@ -116,7 +116,7 @@ wake (起床) させる。 このアドレスは \fBset_tid_address\fP(2) シ 参照) を参照する)。 これ以降に、呼び出し元のプロセスと子プロセスの一方が ファイルディスクリプタの操作 (ファイルディスクリプタの オープン・クローズや、ファイルディスクリプタ・フラグの変更) を行っても、もう一方のプロセスには影響を与えない。 .TP -\fBCLONE_FS\fP (since Linux 2.0) +\fBCLONE_FS\fP (Linux 2.0 以降) \fBCLONE_FS\fP が設定された場合、呼び出し元のプロセスと子プロセスが同じファイル・システム 情報を共有する。ファイル・システム情報は、ファイル・システムのルート (root)、 カレント・ワーキング・ディレクトリ (current working directory) や umask などである。 呼び出し元のプロセスや子プロセスのどちらか一方によって \fBchroot\fP(2), diff --git a/release/man2/eventfd.2 b/release/man2/eventfd.2 index aece55ab..eb825b78 100644 --- a/release/man2/eventfd.2 +++ b/release/man2/eventfd.2 @@ -32,12 +32,10 @@ eventfd \- イベント通知用のファイルディスクリプタを生成す .sp \fBint eventfd(unsigned int \fP\fIinitval\fP\fB, int \fP\fIflags\fP\fB);\fP .SH 説明 -\fBeventfd\fP() creates an "eventfd object" that can be used as an event -wait/notify mechanism by user\-space applications, and by the kernel to -notify user\-space applications of events. The object contains an unsigned -64\-bit integer (\fIuint64_t\fP) counter that is maintained by the kernel. -This counter is initialized with the value specified in the argument -\fIinitval\fP. +\fBeventfd\fP() は "eventfd オブジェクト" を生成する。 eventfd +オブジェクトはユーザ空間アプリケーションがイベント待ち受け/通知用の 仕組みとして使うことができる。また、カーネルがユーザ空間アプリケーションに +イベントを通知するためにも使うことができる。 このオブジェクトには、unsigned の 64 ビット整数 (\fIuint64_t\fP) +型のカウンタが含まれており、このカウンタはカーネルにより管理される。 このカウンタは \fIinitval\fP 引き数で指定された値で初期化される。 以下の値のいくつかをビット単位の論理和 (OR) で指定することで、 \fBeventfd\fP() の振舞いを変更することができる。 @@ -115,8 +113,8 @@ posts" が 実行された場合にはオーバーフローが起こり得る ( \fBread\fP(2) は \fIuint64_t\fP の最大値 (すなわち 0xffffffffffffffff) を返す。 .RE .IP -The eventfd file descriptor also supports the other file\-descriptor -multiplexing APIs: \fBpselect\fP(2) and \fBppoll\fP(2). +eventfd ファイルディスクリプタは、これ以外のファイルディスクリプタ 多重 API である \fBpselect\fP(2) と \fBppoll\fP(2) +もサポートしている。 .TP \fBclose\fP(2) ファイルディスクリプタがそれ以降は必要なくなった際には、クローズすべきである。 同じ eventfd @@ -165,10 +163,8 @@ close\-on\-exec フラグが設定されていない場合、 \fBexecve\fP(2) カーネルでのオーバヘッドは比べるとずっと小さく、ファイルディスクリプタも 一つしか必要としない (パイプの場合は二つ必要である)。 .\" or eventually syslets/threadlets -When used in the kernel, an eventfd file descriptor can provide a bridge -from kernel to user space, allowing, for example, functionalities like KAIO -(kernel AIO) to signal to a file descriptor that some operation is -complete. +カーネル内で使用すると、eventfd ファイルディスクリプタはカーネル空間からユーザ空間へのブリッジ機能を提供することができ、 例えば KAIO +(kernel AIO) のような機能が、あるファイルディスクリプタに何らかの操作が完了したことを 通知することができる。 eventfd ファイルディスクリプタの重要な点は、 eventfd ファイルディスクリプタが \fBselect\fP(2), \fBpoll\fP(2), \fBepoll\fP(7) を使って他のファイルディスクリプタと全く同様に監視できる点である。 このことは、アプリケーションは「従来の diff --git a/release/man2/getpriority.2 b/release/man2/getpriority.2 index 0b547374..deefe397 100644 --- a/release/man2/getpriority.2 +++ b/release/man2/getpriority.2 @@ -134,8 +134,8 @@ Linux behavior, which may be made standards conformant in the future. .SH 関連項目 \fBnice\fP(1), \fBrenice\fP(1), \fBfork\fP(2), \fBcapabilities\fP(7) -\fIDocumentation/scheduler/sched\-nice\-design.txt\fP in the Linux kernel source -tree (since Linux 2.6.23) +Linux カーネルのソースツリー内の \fIDocumentation/scheduler/sched\-nice\-design.txt\fP (Linux +2.6.23 以降) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 である。プロジェクトの説明とバグ報告に関する情報は diff --git a/release/man2/iopl.2 b/release/man2/iopl.2 index ee35ad0f..fa31bad1 100644 --- a/release/man2/iopl.2 +++ b/release/man2/iopl.2 @@ -72,8 +72,7 @@ The calling process has insufficient privilege to call \fBiopl\fP(); the \fBCAP_SYS_RAWIO\fP capability is required to raise the I/O privilege level above its current value. .SH 準拠 -\fBiopl\fP() is Linux\-specific and should not be used in programs that are -intended to be portable. +\fBipc\fP() は Linux 特有であり、 移植を意図したプログラムでは 使用してはいけない。 .SH 注意 libc5 ではシステムコールとして扱い \fI\fP にプロトタイプが存在している。 glibc1 にはプロトタイプは存在していない。 glibc2 は \fI\fP と \fI\fP diff --git a/release/man2/ioprio_set.2 b/release/man2/ioprio_set.2 index 598ab60c..743356a1 100644 --- a/release/man2/ioprio_set.2 +++ b/release/man2/ioprio_set.2 @@ -37,12 +37,11 @@ ioprio_get, ioprio_set \- I/O スケジューリングクラスと優先度の \fINote\fP: There are no glibc wrappers for these system calls; see NOTES. .SH 説明 -The \fBioprio_get\fP() and \fBioprio_set\fP() system calls respectively get and -set the I/O scheduling class and priority of one or more threads. +システムコール \fBioprio_get\fP() / \fBioprio_set\fP() は、(1つ以上の) スレッドの I/O スケジューリングクラスと +優先度の取得/設定を行う。 -The \fIwhich\fP and \fIwho\fP arguments identify the thread(s) on which the system -calls operate. The \fIwhich\fP argument determines how \fIwho\fP is interpreted, -and has one of the following values: +\fIwhich\fP と \fIwho\fP 引き数でシステムコールの操作対象となるスレッドを指示する。 \fIwhich\fP 引き数は、 \fIwho\fP +をどのように解釈するかを決めるもので、以下のいずれか一つを指定する。 .TP \fBIOPRIO_WHO_PROCESS\fP \fIwho\fP is a process ID or thread ID identifying a single process or thread. @@ -105,8 +104,7 @@ I/O 優先度は読み出しと同期書き込み (\fBO_DIRECT\fP, \fBO_SYNC\fP) .SH 準拠 これらのシステムコールは Linux 独自である。 .SH 注意 -Glibc does not provide a wrapper for these system calls; call them using -\fBsyscall\fP(2). +glibc はこれらのシステムコールに対するラッパー関数を提供していない。 \fBsyscall\fP(2) を使って呼び出すこと。 Two or more processes or threads can share an I/O context. This will be the case when \fBclone\fP(2) was called with the \fBCLONE_IO\fP flag. However, by @@ -118,7 +116,7 @@ that is returned by \fBgettid\fP(2) or \fBclone\fP(2). これらのシステムコールは、I/O 優先度に対応した I/O スケジューラと 組み合わせて使用された場合にのみ効果を持つ。 カーネル 2.6.17 では、この条件を満たすスケジューラは Completely Fair Queuing (CFQ) I/O スケジューラだけである。 -.SS "Selecting an I/O scheduler" +.SS "I/O スケジューラの選択" I/O スケジューラの選択はデバイス単位に行われ、その選択は スペシャルファイル \fI/sys/block//queue/scheduler\fP 経由で行われる。 @@ -143,7 +141,7 @@ Password: #\fB echo cfq > /sys/block/hda/queue/scheduler\fP .fi .RE -.SS "The Completely Fair Queuing (CFQ) I/O scheduler" +.SS "Completely Fair Queuing (CFQ) I/O スケジューラ" バージョン 3 (別名 CFQ Time Sliced) 以降、 CPU スケジューリングと同様の I/O nice レベルが CFQ に実装されている。 これらの nice レベルは 3つのスケジューリングクラスに分類でき、 各スケジューリングクラスにつき 1つ以上の優先度レベルが定義されている。 @@ -193,7 +191,7 @@ glibc は、このページに記載された関数プロトタイプやマク .SH 関連項目 \fBionice\fP(1), \fBgetpriority\fP(2), \fBopen\fP(2), \fBcapabilities\fP(7) -\fIDocumentation/block/ioprio.txt\fP in the Linux kernel source tree +Linux カーネルソース内の \fIDocumentation/block/ioprio.txt\fP .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 である。プロジェクトの説明とバグ報告に関する情報は diff --git a/release/man2/ipc.2 b/release/man2/ipc.2 index 0b7b4311..ff05adb0 100644 --- a/release/man2/ipc.2 +++ b/release/man2/ipc.2 @@ -44,9 +44,9 @@ ipc \- System V IPC システムコール .SH 準拠 \fBipc\fP() は Linux 特有であり、 移植を意図したプログラムでは 使用してはいけない。 .SH 注意 -On some architectures\(emfor example x86\-64 and ARM\(emthere is no \fBipc\fP() -system call; instead \fBmsgctl\fP(2), \fBsemctl\fP(2), \fBshmctl\fP(2), and so on -really are implemented as separate system calls. +いくつかのアーキテクチャ\(emfor 例えば x86\-64 や ARM\(emでは、システムコール \fBipc\fP() +が存在しない。実際には、その代わりに \fBmsgctl\fP(2), \fBsemctl\fP(2), \fBshmctl\fP(2) +などが独立したシステムコールとして実装されている。 .SH 関連項目 \fBmsgctl\fP(2), \fBmsgget\fP(2), \fBmsgrcv\fP(2), \fBmsgsnd\fP(2), \fBsemctl\fP(2), \fBsemget\fP(2), \fBsemop\fP(2), \fBshmat\fP(2), \fBshmctl\fP(2), \fBshmdt\fP(2), diff --git a/release/man2/kill.2 b/release/man2/kill.2 index 12fd25e4..8f4bdc74 100644 --- a/release/man2/kill.2 +++ b/release/man2/kill.2 @@ -112,7 +112,7 @@ POSIX.1\-2001 では、 \fIkill(\-1,sig)\fP が 呼び出し元のプロセス POSIX.1\-2001 では以下の動作になることを要求している。 自分自身にシグナルを送ると、シグナルを送ったスレッドがそのシグナルをブロック しておらず、他のどのスレッドもそのシグナルを受ける状態にもなく \fBsigwait\fP(3) でそのシグナルを待ってもいない場合、 \fBkill\fP() が返る前に少なくとも一つのブロックされていない シグナルがシグナルを送ったスレッドに配送されなければならない。 -.SS "Linux notes" +.SS "Linux での注意" .\" In the 0.* kernels things chopped and changed quite .\" a bit - MTK, 24 Jul 02 Linux では、特権のないプロセスが他のプロセスにシグナルを送信するために 必要な権限についてのルールが、カーネルバージョンにより違っている。 @@ -120,12 +120,9 @@ Linux では、特権のないプロセスが他のプロセスにシグナル 1.2.3 から 1.3.77では、送信側の実効ユーザーID が受信側の 実ユーザーID か実効ユーザーID のいずれかと一致すればシグナルを送信できた。 現在のルールは、POSIX.1\-2001 に準拠しており、カーネル 1.3.78 以降で 適用されている。 .SH バグ -In 2.6 kernels up to and including 2.6.7, there was a bug that meant that -when sending signals to a process group, \fBkill\fP() failed with the error -\fBEPERM\fP if the caller did not have permission to send the signal to \fIany\fP -(rather than \fIall\fP) of the members of the process group. Notwithstanding -this error return, the signal was still delivered to all of the processes -for which the caller had permission to signal. +バージョン 2.6.7 以前の 2.6 系のカーネルには、 プロセスグループにシグナルを送ったときに、 呼び出し元のプロセスがプロセスグループの +(全メンバーではなく) 一部のメンバーに対してのみシグナルを送る許可を持っていない場合に、 \fBkill\fP() がエラー \fBEPERM\fP +で失敗するというバグがある。 このエラーが返るにもかかわらず、そのシグナルは呼び出し元が シグナルを送る許可を持つ全てのプロセスへ送られる。 .SH 関連項目 \fB_exit\fP(2), \fBkillpg\fP(2), \fBsignal\fP(2), \fBtkill\fP(2), \fBexit\fP(3), \fBsigqueue\fP(3), \fBcredentials\fP(7), \fBcapabilities\fP(7), \fBsignal\fP(7) diff --git a/release/man2/setsid.2 b/release/man2/setsid.2 index 8a012b78..4b301415 100644 --- a/release/man2/setsid.2 +++ b/release/man2/setsid.2 @@ -43,12 +43,10 @@ setsid \- セッション (session) を作成し、プロセスグループ ID .br .ad b .SH 説明 -\fBsetsid\fP() creates a new session if the calling process is not a process -group leader. The calling process is the leader of the new session, the -process group leader of the new process group, and has no controlling -terminal. The process group ID and session ID of the calling process are -set to the PID of the calling process. The calling process will be the only -process in this new process group and in this new session. +\fBsetsid\fP() は呼び出したプロセスがプロセスグループ・リーダー (process group leader) +でなければ、新しいセッションを作成する。 呼び出したプロセスは新しいセッションのリーダー、新しいプロセスグループの +プロセスグループ・リーダーとなり、端末の制御を持たない。 呼び出したプロセスのプロセスグループ ID とセッション ID には、 呼び出したプロセスの +PID が設定される。呼び出したプロセスはこの 新しいプロセスグループ、この新しいセッションの唯一のプロセスとなる。 .SH 返り値 成功すると、呼び出したプロセスの (新しい) セッション ID が返される。 エラーの場合は、 \fI(pid_t)\ \-1\fP が返され、 \fIerror\fP にエラーを示す値が設定される。 diff --git a/release/man2/sgetmask.2 b/release/man2/sgetmask.2 index 7fe3a91d..9b350743 100644 --- a/release/man2/sgetmask.2 +++ b/release/man2/sgetmask.2 @@ -36,7 +36,7 @@ sgetmask, ssetmask \- シグナルマスクの操作 (廃止予定) .sp \fBlong ssetmask(long \fP\fInewmask\fP\fB);\fP -\fINote\fP: There are no glibc wrappers for these system calls; see NOTES. +\fI注\fP: これらのシステムコールには、glibc のラッパー関数はない。「注意」の節を参照。 .SH 説明 これらのシステムコールは廃止予定であり、 「使用しないこと」。 代わりに \fBsigprocmask\fP(2) を使用すること。 @@ -53,8 +53,8 @@ sgetmask, ssetmask \- シグナルマスクの操作 (廃止予定) .SH 準拠 これらのシステムコールは Linux 固有である。 .SH 注意 -Glibc does not provide wrappers for these obsolete system calls; in the -unlikely event that you want to call them, use \fBsyscall\fP(2). +glibc はこれらの古いシステムコールに対するラッパー関数を提供していない。 +あまりないと思うが、これらを呼び出したい場合には \fBsyscall\fP(2) を使うこと。 これらのシステムコールは、 31 より大きいシグナル番号 (つまり、リアルタイムシグナル) を扱えない。 diff --git a/release/man2/sigaction.2 b/release/man2/sigaction.2 index 4ba3a6ab..4e84e87b 100644 --- a/release/man2/sigaction.2 +++ b/release/man2/sigaction.2 @@ -101,13 +101,13 @@ struct sigaction { そのシグナルを無視する \fBSIG_IGN\fP、 シグナルハンドラ関数へのポインタが設定できる。 シグナルハンドラ関数の引き数は一つであり、シグナル番号が引き数として 渡される。 .PP -If \fBSA_SIGINFO\fP is specified in \fIsa_flags\fP, then \fIsa_sigaction\fP (instead -of \fIsa_handler\fP) specifies the signal\-handling function for \fIsignum\fP. -This function receives the signal number as its first argument, a pointer to -a \fIsiginfo_t\fP as its second argument and a pointer to a \fIucontext_t\fP (cast -to \fIvoid\ *\fP) as its third argument. (Commonly, the handler function -doesn't make any use of the third argument. See \fBgetcontext\fP(3) for -further information about \fIucontext_t\fP.) +\fIsa_flags\fP に \fBSA_SIGINFO\fP が指定された場合、 (\fIsa_handler\fP ではなく) +\fIsa_sigaction\fP により \fIsignum\fP に対応するシグナルハンドラ関数が指定さ +れる。指定される関数は、最初の引き数としてシグナル番号を、二番目の引き +数として \fIsiginfo_t\fP へのポインタを、三番目の引き数として (\fIvoid\ *\fP +にキャストした) \fIucontext_t\fP へのポインタを受けとる。 (一般的には、 +ハンドラ関数の三番目の引き数が使用されない。\fIucontext_t\fP についての +詳しい情報は \fBgetcontext\fP(3) を参照。) .PP \fIsa_mask\fP は、シグナル・ハンドラ実行中に禁止 (block) すべきシグナルのマスクを指定する (ハンドラ実行中のシグナルの禁止は、シグナル・ハンドラが起動されたスレッド のシグナルのマスクに追加することで行われる)。 さらに、 @@ -141,9 +141,8 @@ further information about \fIucontext_t\fP.) 別のシグナル・スタックが利用可能でなければ、デフォルトのスタックが 使用される。 このフラグはシグナルハンドラを設定する際にのみ意味を持つ。 .TP \fBSA_RESETHAND\fP -Restore the signal action to the default upon entry to the signal handler. -This flag is only meaningful when establishing a signal handler. -\fBSA_ONESHOT\fP is an obsolete, nonstandard synonym for this flag. +シグナルハンドラを設定する際に、シグナルの動作をデフォルトに戻す。 このフラグはシグナルハンドラを設定する際にのみ意味を持つ。 +\fBSA_ONESHOT\fP はこのフラグと同じ意味だが、廃止されており、非標準である。 .TP \fBSA_RESTART\fP いくつかのシステムコールをシグナルの通知の前後で再開できるようにして、 BSD シグナル方式 (semantics) と互換性のある動作を提供する。 @@ -153,9 +152,8 @@ This flag is only meaningful when establishing a signal handler. .\" (The .\" .I sa_sigaction .\" field was added in Linux 2.1.86.) -The signal handler takes three arguments, not one. In this case, -\fIsa_sigaction\fP should be set instead of \fIsa_handler\fP. This flag is only -meaningful when establishing a signal handler. +シグナルハンドラは一つではなく、三つの引き数を持つ。この場合は \fIsa_handler\fP のかわりに \fIsa_sigaction\fP +を設定しなければならない このフラグはシグナルハンドラを設定する際にのみ意味を持つ。 .RE .PP \fIsa_sigaction\fP のパラメータ \fIsiginfo_t\fP は以下の要素を持つ構造体である: @@ -493,10 +491,9 @@ POSIX.1\-2001 では \fBSA_NOCLDWAIT\fP, \fBSA_RESETHAND\fP, \fBSA_NODEFER\fP, シグナルハンドラ内から安全に呼び出すことができる、 async\-signal\-safe functions (非同期シングルで安全な関数) の リストについては \fBsignal\fP(7) を参照。 .SS 非公式 -Before the introduction of \fBSA_SIGINFO\fP it was also possible to get some -additional information, namely by using a \fIsa_handler\fP with second argument -of type \fIstruct sigcontext\fP. See the relevant Linux kernel sources for -details. This use is obsolete now. +\fBSA_SIGINFO\fP が導入される前は、 \fIstruct sigcontext\fP 型の二番目の引き数と一緒に \fIsa_handler\fP +を使用することで、 いくつかの追加の情報を入手することができた。 詳細については Linux カーネルソースの関連部分を見てほしい。 +現在はこの使用法は廃止されている。 .SH バグ 2.6.13 以前のカーネルでは、 \fIsa_flags\fP に \fBSA_NODEFER\fP を指定した場合、 ハンドラが実行中に配送されたシグナル自身がマスクされなくなるだけでなく、 \fIsa_mask\fP に指定されたシグナルもマスクされなくなる。 diff --git a/release/man2/signal.2 b/release/man2/signal.2 index 021969ab..c894cb6d 100644 --- a/release/man2/signal.2 +++ b/release/man2/signal.2 @@ -109,18 +109,15 @@ POSIX では、 \fBkill\fP(2) や \fBraise\fP(3) で生成できないシグ POSIX.1 は、 \fBsigaction\fP(2) を規定することで移植性に関する混乱を解決した。 \fBsigaction\fP(2) はシグナル・ハンドラが起動される際の挙動を明示的に制御できる。 \fBsignal\fP() の代わりにこのインターフェイスを使うこと。 -In the original UNIX systems, when a handler that was established using -\fBsignal\fP() was invoked by the delivery of a signal, the disposition of the -signal would be reset to \fBSIG_DFL\fP, and the system did not block delivery -of further instances of the signal. This is equivalent to calling -\fBsigaction\fP(2) with the following flags: +オリジナルの UNIX システムでは、 \fBsignal\fP() を使って設定されたハンドラがシグナルの配送により起動されると、 +そのシグナルの処理方法は \fBSIG_DFL\fP にリセットされ、システムは同じシグナルがさらに生成されても +シグナルの配送をブロックしなかった。これは、以下のフラグで \fBsigaction\fP(2) を呼び出すのと等価である。 sa.sa_flags = SA_RESETHAND | SA_NODEFER; -System V also provides these semantics for \fBsignal\fP(). This was bad -because the signal might be delivered again before the handler had a chance -to reestablish itself. Furthermore, rapid deliveries of the same signal -could result in recursive invocations of the handler. +System V でも、 \fBsignal\fP() に対してこれらの挙動を規定している。 こうした挙動はまずく、ハンドラがハンドラ自身を再設定する機会が +来るより前に、同じシグナルがまた配送される可能性がある。 さらに、同じシグナルが立て続けに配送されると、同じシグナルが +ハンドラを繰り返し起動されることになる。 BSD improved on this situation, but unfortunately also changed the semantics of the existing \fBsignal\fP() interface while doing so. On BSD, when a diff --git a/release/man2/sigwaitinfo.2 b/release/man2/sigwaitinfo.2 index 0b0d0ec4..f4b2f4ba 100644 --- a/release/man2/sigwaitinfo.2 +++ b/release/man2/sigwaitinfo.2 @@ -46,15 +46,13 @@ glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参 .sp \fBsigwaitinfo\fP(), \fBsigtimedwait\fP(): _POSIX_C_SOURCE\ >=\ 199309L .SH 説明 -\fBsigwaitinfo\fP() suspends execution of the calling thread until one of the -signals in \fIset\fP is pending (If one of the signals in \fIset\fP is already -pending for the calling thread, \fBsigwaitinfo\fP() will return immediately.) +\fBsigwaitinfo\fP() は \fIset\fP のうちのどれかのシグナルが処理待ちになるまで、 呼び出しスレッドの実行を一時停止する +(呼び出しスレッドに対して \fIset\fP のうちのどれかのシグナルが既に待機中 (pending) である場合、 \fBsigwaitinfo\fP() +はすぐに戻る)。 -\fBsigwaitinfo\fP() removes the signal from the set of pending signals and -returns the signal number as its function result. If the \fIinfo\fP argument -is not NULL, then the buffer that it points to is used to return a structure -of type \fIsiginfo_t\fP (see \fBsigaction\fP(2)) containing information about the -signal. +\fBsigwaitinfo\fP() はそのシグナルを待機中のシグナルの集合から削除し、関数の結果としてシグナル番号を返す。 \fIinfo\fP 引き数が +NULL でない場合、配送されたシグナルの情報が入った \fIsiginfo_t\fP 型 (\fBsigaction\fP(2) を参照) の構造体を +\fIinfo\fP が指すバッファに入れて返す。 .PP If multiple signals in \fIset\fP are pending for the caller, the signal that is retrieved by \fBsigwaitinfo\fP() is determined according to the usual ordering @@ -83,8 +81,7 @@ struct timespec { .SH エラー .TP \fBEAGAIN\fP -No signal in \fIset\fP was became pending within the \fItimeout\fP period -specified to \fBsigtimedwait\fP(). +\fIset\fP のうちのどのシグナルも \fBsigtimedwait\fP() に指定された \fItimeout\fP の期間内に処理待ちにならなかった。 .TP \fBEINTR\fP シグナル待ちがシグナルハンドラによって中断 (interrupt) された (このハンドラは \fIset\fP にあるシグナル以外のものである)。 @@ -95,24 +92,20 @@ specified to \fBsigtimedwait\fP(). .SH 準拠 POSIX.1\-2001. .SH 注意 -In normal usage, the calling program blocks the signals in \fIset\fP via a -prior call to \fBsigprocmask\fP(2) (so that the default disposition for these -signals does not occur if they become pending between successive calls to -\fBsigwaitinfo\fP() or \fBsigtimedwait\fP()) and does not establish handlers for -these signals. In a multithreaded program, the signal should be blocked in -all threads, in order to prevent the signal being treated according to its -default disposition in a thread other than the one calling \fBsigwaitinfo\fP() -or \fBsigtimedwait\fP()). +通常の使用法では、呼び出し側プロセスはこれらの関数より先に \fBsigprocmask\fP(2) の呼び出すことにより \fIset\fP +に含まれるシグナルをブロックし (そのためにこれらのシグナルがこの後に続く \fBsigwaitinfo\fP() や \fBsigtimedwait\fP() +の呼び出しの間に処理待ちになった場合には、デフォルトの動作は行われず)、 これらのシグナルに対するハンドラは設定しない。 マルチスレッドプログラムでは、 +\fBsigwaitinfo\fP() や \fBsigtimedwait\fP() +を呼び出したスレッド以外のスレッドで、そのシグナルがデフォルトの動作に基いて処理されないように、全てのスレッドで該当シグナルをブロックすべきである。 指定されたスレッドに対する処理待ちのシグナルの集合は、 そのスレッド自体宛ての処理待ちのシグナル集合と、プロセス全体宛ての 処理待ちのシグナル集合をあわせたものである (\fBsignal\fP(7) 参照)。 \fBSIGKILL\fP と \fBSIGSTOP\fP を待とうとした場合、黙って無視される。 -If multiple threads of a process are blocked waiting for the same signal(s) -in \fBsigwaitinfo\fP() or \fBsigtimedwait\fP(), then exactly one of the threads -will actually receive the signal if it becomes pending for the process as a -whole; which of the threads receives the signal is indeterminate. +一つのプロセス内の複数のスレッドが \fBsigwaitinfo\fP() や \fBsigtimedwait\fP() で同じシグナルを待って停止した場合、 +プロセス全体宛てのシグナルが処理待ちになると、複数のスレッドのうち一つだけが 実際にそのシグナルを受信することになる。 +どのスレッドがシグナルを受信するかは決まっていない。 POSIX では \fBsigtimedwait\fP() の引き数 \fItimeout\fP の値を NULL にした場合の意味を未定義としている。 \fBsigwaitinfo\fP() を呼び出したのと同じ意味としてもよいことになっており、 実際 Linux ではこのように動作する。 diff --git a/release/man2/tkill.2 b/release/man2/tkill.2 index 45b5b791..342c34aa 100644 --- a/release/man2/tkill.2 +++ b/release/man2/tkill.2 @@ -41,7 +41,7 @@ tkill, tgkill \- スレッドにシグナルを送る \fBint tgkill(int \fP\fItgid\fP\fB, int \fP\fItid\fP\fB, int \fP\fIsig\fP\fB);\fP .fi -\fINote\fP: There are no glibc wrappers for these system calls; see NOTES. +\fI注\fP: これらのシステムコールには、glibc のラッパー関数はない。「注意」の節を参照。 .SH 説明 \fBtgkill\fP() はスレッド・グループ \fItgid\fP に属するスレッド ID が \fItid\fP のスレッドにシグナル \fIsig\fP を送る。 (これに対し、 \fBkill\fP(2) は一つのプロセス (すなわち、スレッド・グループ) にまとめてシグナルを 送るのにだけ利用できる。 diff --git a/release/man2/unshare.2 b/release/man2/unshare.2 index 70c8fe3f..a3f64293 100644 --- a/release/man2/unshare.2 +++ b/release/man2/unshare.2 @@ -50,10 +50,9 @@ unshare \- プロセス実行コンテキストの一部を分離する 呼び出し元プロセスは他のプロセスとファイルディスクリプタを共有しなくなる。 .TP \fBCLONE_FS\fP -Reverse the effect of the \fBclone\fP(2) \fBCLONE_FS\fP flag. Unshare file -system attributes, so that the calling process no longer shares its root -directory (\fBchroot\fP(2)), current directory (\fBchdir\fP(2)), or umask -(\fBumask\fP(2)) attributes with any other process. +\fBclone\fP(2) \fBCLONE_FS\fP フラグの効果を取り消す。ファイルシステム属性を共有させず、呼び出し元プロセスは、ルートディレクトリ +(\fBchroot\fP(2))、カレントディレクトリ (\fBchdir\fP(2))、 umask (\fBumask\fP(2)) +を他のプロセスと共有しなくなる。 .TP \fBCLONE_NEWIPC\fP (Linux 2.6.19 以降) このフラグは \fBclone\fP(2) \fBCLONE_NEWIPC\fP フラグと同じ効果を持つ。 @@ -63,10 +62,10 @@ System V IPC 名前空間を共有せず、呼び出し元プロセスは 他の 使用するには \fBCAP_SYS_ADMIN\fP ケーパビリティが必要である。 .TP \fBCLONE_NEWNET\fP (Linux 2.6.24 以降) -This flag has the same effect as the \fBclone\fP(2) \fBCLONE_NEWNET\fP flag. -Unshare the network namespace, so that the calling process is moved into a -new network namespace which is not shared with any previously existing -process. Use of \fBCLONE_NEWNET\fP requires the \fBCAP_SYS_ADMIN\fP capability. +このフラグは \fBclone\fP(2) \fBCLONE_NEWNET\fP フラグと同じ効果を持つ。ネット +ワーク名前空間を共有せず、呼び出し元プロセスは他のプロセスとは共有しな +い固有のネットワーク名前空間のコピーを持つ。\fBCLONE_NEWNET\fP を使用する +には \fBCAP_SYS_ADMIN\fP ケーパビリティが必要である。 .TP \fBCLONE_NEWNS\fP .\" These flag name are inconsistent: @@ -154,11 +153,10 @@ System V セマフォのアンドゥ値を共有せず、呼び出し元プロ .\"be incrementally added to unshare without affecting legacy .\"applications using unshare. .\" -Not all of the process attributes that can be shared when a new process is -created using \fBclone\fP(2) can be unshared using \fBunshare\fP(). In -particular, as at kernel 3.8, \fBunshare\fP() does not implement flags that -reverse the effects of \fBCLONE_SIGHAND\fP, \fBCLONE_THREAD\fP, or \fBCLONE_VM\fP. -Such functionality may be added in the future, if required. +\fBclone\fP(2) で新しいプロセスを生成したときに共有される全てのプロセス属性を、 \fBunshare\fP() +によって共有の解除ができるわけではない。 特に、カーネル 3.8 時点では、 \fBunshare\fP() に \fBCLONE_SIGHAND\fP, +\fBCLONE_THREAD\fP, \fBCLONE_VM\fP の効果を取り消すためのフラグが実装されていない。 +これらの機能は、必要であれば将来追加されるかもしれない。 .SH 関連項目 \fBclone\fP(2), \fBfork\fP(2), \fBkcmp\fP(2), \fBsetns\fP(2), \fBvfork\fP(2) diff --git a/release/man2/wait.2 b/release/man2/wait.2 index c65908e6..62ca5162 100644 --- a/release/man2/wait.2 +++ b/release/man2/wait.2 @@ -267,7 +267,7 @@ POSIX.1\-2001 では以下のように規定されている。 \fBSIGCHLD\fP の はこの仕様に準拠している。 しかし、Linux 2.4 (とそれ以前のバージョン) はそうではない: \fBSIGCHLD\fP が無視される状態で \fBwait\fP() または \fBwaitpid\fP() が呼び出された場合、 \fBSIGCHLD\fP が無視されていないかのように振る舞う。 つまり、呼び出しによって次の子プロセスの終了までブロックされ、 終了した子プロセスの PID と状態が返される。 -.SS "Linux notes" +.SS "Linux での注意" Linux カーネルでは、カーネルによってスケジュールされるスレッドは プロセスと明確に区別できる構成要素ではない。スレッドは Linux 固有の \fBclone\fP(2) システムコールを使用して生成されるプロセスに過ぎない。 移植性のある \fBpthread_create\fP(3) コールのような他のルーチンは \fBclone\fP(2) を使用して実装されている; これらでは \fBwaitid\fP() を使うことはできない。 diff --git a/release/man3/sigpause.3 b/release/man3/sigpause.3 index d1c45f77..71fd4d36 100644 --- a/release/man3/sigpause.3 +++ b/release/man3/sigpause.3 @@ -55,7 +55,7 @@ System V 版の \fBsigpause\fP() は POSIX.1\-2001 で標準化されている では BSD 版と互換性のない System V 版のこの関数が標準化された。 UNIX 95 版は、指定されたシグナル \fIsig\fP をプロセスのシグナルマスクから削除するだけである。 同じ名前で互換性のない 2 つの関数があるという不幸な事態は、 \fB\%sigsuspend\fP(2) 関数によって解消された。 この関数は (\fIint\fP の代わりに) \fBsigset_t *\fP 引き数をとる。 -.SS "Linux notes" +.SS "Linux での注意" Linux では、このルーチンは Sparc (sparc64) アーキテクチャでのみ システムコールとなっている。 libc4 と libc5 には BSD 版しかない。 diff --git a/release/man3/sigsetops.3 b/release/man3/sigsetops.3 index 41712ff9..3ddfe1a9 100644 --- a/release/man3/sigsetops.3 +++ b/release/man3/sigsetops.3 @@ -89,7 +89,7 @@ _POSIX_C_SOURCE\ >=\ 1 || _XOPEN_SOURCE || _POSIX_SOURCE .SH 準拠 POSIX.1\-2001. .SH 注意 -.SS "Glibc notes" +.SS "glibc での注意" \fB_GNU_SOURCE\fP 機能検査マクロが定義されていると、 \fI\fP でシグナル集合を操作する 3つの関数が追加で公開される。 .TP diff --git a/release/man3/sigvec.3 b/release/man3/sigvec.3 index 886688ce..77b22713 100644 --- a/release/man3/sigvec.3 +++ b/release/man3/sigvec.3 @@ -51,10 +51,9 @@ glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参 .sp 上記の全ての関数: _BSD_SOURCE .SH 説明 -These functions are provided in glibc as a compatibility interface for -programs that make use of the historical BSD signal API. This API is -obsolete: new applications should use the POSIX signal API (\fBsigaction\fP(2), -\fBsigprocmask\fP(2), etc.). +これらの関数は、昔ながらの BSD 版シグナル API を使用しているプログラム に対して互換性のあるインタフェースを glibc +で提供するものである。 この API は過去のものであり、新しいアプリケーションでは POSIX シグナル API (\fBsigaction\fP(2), +\fBsigprocmask\fP(2) など) を使用すべきである。 関数 \fBsigvec\fP() は、(POSIX の \fBsigaction\fP(2) と同様に) シグナル \fIsig\fP の動作の設定・取得を行う。 \fIvec\fP は、NULL 以外の場合、 \fIsig\fP の新しい動作を定義した \fIsigvec\fP 構造体へのポインタである。 \fIovec\fP @@ -75,15 +74,13 @@ struct sigvec { .fi .in -The \fIsv_handler\fP field specifies the disposition of the signal, and is -either: the address of a signal handler function; \fBSIG_DFL\fP, meaning the -default disposition applies for the signal; or \fBSIG_IGN\fP, meaning that the -signal is ignored. +\fIsv_handler\fP フィールドはシグナルの動作を指定するもので、 シグナルハンドラ関数のアドレスか、 \fBSIG_DFL\fP と +\fBSIG_IGN\fP のいずれかを指定できる。 \fBSIG_DFL\fP はシグナルに適用されるデフォルトの動作を意味し、 \fBSIG_IGN\fP +はシグナルを無視することを意味する。 -If \fIsv_handler\fP specifies the address of a signal handler, then \fIsv_mask\fP -specifies a mask of signals that are to be blocked while the handler is -executing. In addition, the signal for which the handler is invoked is also -blocked. Attempts to block \fBSIGKILL\fP or \fBSIGSTOP\fP are silently ignored. +\fIsv_handler\fP にシグナルハンドラのアドレスを指定した場合、 \fIsv_mask\fP +はハンドラが実行中にブロックされるべきシグナルのマスクを指定する。 また、ハンドラを起動したシグナル自身はブロックされる。 \fBSIGKILL\fP か +\fBSIGSTOP\fP をブロックしようとした場合には、黙って無視される。 \fIsv_handler\fP にシグナルハンドラのアドレスを指定した場合、 \fIsv_flags\fP フィールドはハンドラが呼ばれた際の挙動を制御するフラグを指定する。 このフィールドには、0 か、以下のフラグを 1個以上指定できる: diff --git a/release/man3/sigwait.3 b/release/man3/sigwait.3 index 3d4a32b0..04082750 100644 --- a/release/man3/sigwait.3 +++ b/release/man3/sigwait.3 @@ -46,10 +46,9 @@ glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参 \fBsigwait\fP(): _POSIX_C_SOURCE\ >=\ 1 || _XOPEN_SOURCE || _POSIX_SOURCE .ad b .SH 説明 -The \fBsigwait\fP() function suspends execution of the calling thread until -one of the signals specified in the signal set \fIset\fP becomes pending. The -function accepts the signal (removes it from the pending list of signals), -and returns the signal number in \fIsig\fP. +\fBsigwait\fP() 関数は、シグナル集合 \fIset\fP で指定されたシグナルの一つが処理待ち (pending) になるまで、 +呼び出したスレッドの実行を中断する。 この関数はそのシグナルを受け取り (つまり、処理待ちのシグナルのリスト +からそのシグナルを削除し)、そのシグナル番号を \fIsig\fP に格納して返す。 \fBsigwait\fP() の動作は \fBsigwaitinfo\fP(2) と同じだが、以下の点が異なる。 .IP * 2 diff --git a/release/man5/acct.5 b/release/man5/acct.5 index 84910b9c..f68e47fc 100644 --- a/release/man5/acct.5 +++ b/release/man5/acct.5 @@ -91,7 +91,7 @@ enum { /* Bits that may be set in ac_flag field */ .PP フィールド \fIac_utime\fP, \fIac_stime\fP, \fIac_etime\fP は "clock ticks" 単位で計測した時間である。 これらの値を \fIsysconf(_SC_CLK_TCK)\fP で割ると、秒に変換できる。 -.SS "Version 3 accounting file format" +.SS "バージョン 3 のアカウンティングファイルのフォーマット" カーネル 2.6.8 以降では、 別のバージョンのアカウンティングファイルを生成することができ、 これを使うにはカーネル構築時に \fBCONFIG_BSD_PROCESS_ACCT_V3\fP オプションが有効になっている必要がある。 このオプションが設定されると、アカウンティングファイルに書き込まれる レコードにフィールドが追加される。 また、フィールド \fIc_uid\fP と diff --git a/release/man7/capabilities.7 b/release/man7/capabilities.7 index 6c0b82b9..bc5f10bf 100644 --- a/release/man7/capabilities.7 +++ b/release/man7/capabilities.7 @@ -62,7 +62,7 @@ capabilities \- Linux のケーパビリティ (capability) の概要 .\" バージョン 2.2 以降の Linux では、 これまでスーパーユーザに結び付けられてきた権限を、 いくつかのグループに分割している。これらのグループは \fIケーパビリティ\fP(capability) と呼ばれ、グループ毎に独立に有効、無効を設定できる。 ケーパビリティはスレッド単位の属性である。 -.SS "Capabilities list" +.SS ケーパビリティのリスト 以下のリストは、 Linux で実装されているケーパビリティと 各ケーパビリティが許可する操作と動作をまとめたものである。 .TP \fBCAP_AUDIT_CONTROL\fP (Linux 2.6.11 以降) @@ -71,7 +71,7 @@ capabilities \- Linux のケーパビリティ (capability) の概要 \fBCAP_AUDIT_WRITE\fP (Linux 2.6.11 以降) カーネル監査のログにレコードを書き込む。 .TP -\fBCAP_BLOCK_SUSPEND\fP (since Linux 3.5) +\fBCAP_BLOCK_SUSPEND\fP (Linux 3.5 以降) Employ features that can block system suspend (\fBepoll\fP(7) \fBEPOLLWAKEUP\fP, \fI/proc/sys/wake_lock\fP). .TP @@ -314,11 +314,11 @@ to arbitrary processes; inspect processes using \fBkcmp\fP(2). .PD 0 .RS .IP * 2 -Perform I/O port operations (\fBiopl\fP(2) and \fBioperm\fP(2)); +I/O ポート操作を実行する (\fBiopl\fP(2)、 \fBioperm\fP(2))。 .IP * access \fI/proc/kcore\fP; .IP * -employ the \fBFIBMAP\fP \fBioctl\fP(2) operation; +\fBFIBMAP\fP \fBioctl\fP(2) 操作を使用する。 .IP * open devices for accessing x86 model\-specific registers (MSRs, see \fBmsr\fP(4)) @@ -401,7 +401,7 @@ the \fIkptr_restrict\fP in \fBproc\fP(5).) .\" システムを起こすトリガーを有効にする (タイマー \fBCLOCK_REALTIME_ALARM\fP や \fBCLOCK_BOOTTIME_ALARM\fP を設定する)。 -.SS "Past and current implementation" +.SS 過去と現在の実装 完全な形のケーパビリティを実装するには、以下の要件を満たす必要がある: .IP 1. 3 全ての特権操作について、カーネルはそのスレッドの実効ケーパビリティセットに 必要なケーパビリティがあるかを確認する。 @@ -412,7 +412,7 @@ the \fIkptr_restrict\fP in \fBproc\fP(5).) .PP .\" カーネル 2.6.24 より前では、最初の 2つの要件のみが満たされている。 カーネル 2.6.24 以降では、3つの要件すべてが満たされている。 -.SS "Thread capability sets" +.SS スレッドケーパビリティセット 各スレッドは以下の 3種類のケーパビリティセットを持つ。各々のケーパビリティセットは 上記のケーパビリティの組み合わせである (全てのケーパビリティが無効でもよい)。 .TP @@ -435,7 +435,7 @@ the \fIkptr_restrict\fP in \fBproc\fP(5).) .PP .\" \fBcapset\fP(2) を使うと、プロセスは自分自身のケーパビリティセット を操作することができる (下記参照)。 -.SS "File capabilities" +.SS ファイルケーパビリティ カーネル 2.6.24 以降では、 \fBsetcap\fP(8) を使って実行ファイルにケーパビリティセットを対応付けることができる。 ファイルケーパビリティセットは \fIsecurity.capability\fP という名前の拡張属性に保存される (\fBsetxattr\fP(2) 参照)。この拡張属性への書き込みには \fBCAP_SETFCAP\fP ケーパビリティが必要である。 @@ -463,7 +463,7 @@ the \fIkptr_restrict\fP in \fBproc\fP(5).) したがって、ファイルにケーパビリティを割り当てる際 (\fBsetcap\fP(8), \fBcap_set_file\fP(3), \fBcap_set_fd\fP(3))、 いずれかのケーパビリティに対して実効フラグを有効と指定する場合、 許可フラグや継承可能フラグを有効にした他の全てのケーパビリティ についても実効フラグを有効と指定しなければならない。 -.SS "Transformation of capabilities during execve()" +.SS "execve() 中のケーパビリティの変換" .PP \fBexecve\fP(2) 実行時に、カーネルはプロセスの新しいケーパビリティを次の アルゴリズムを用いて計算する: .in +4n @@ -573,7 +573,7 @@ Linux 2.6.25 以降では、 「ケーパビリティ・バウンディングセ .\" バウンディングセットからケーパビリティを削除しても、 スレッドの継承可能セットからはそのケーパビリティは削除されない。 しかしながら、バウンディングセットからの削除により、 この先そのケーパビリティをスレッドの継承可能セットに追加すること はできなくなる。 -.SS "Effect of user ID changes on capabilities" +.SS "ユーザ ID 変更のケーパビリティへの影響" ユーザ ID が 0 と 0 以外の間で変化する際の振る舞いを従来と同じにするため、 スレッドの実 UID、実効 UID、保存 set\-user\-ID、ファイルシステム UID が (\fBsetuid\fP(2), \fBsetresuid\fP(2) などを使って) 変更された際に、カーネルはそのスレッドのケーパビリティセットに 以下の変更を行う: @@ -610,7 +610,7 @@ set\-user\-ID が すべて 0 以外の値になった場合、許可と実効 獲得することはできない)。 .IP 4. 新しい実効ケーパビリティセットは新しい許可ケーパビリティセットの 部分集合になっていなければならない。 -.SS "The securebits flags: establishing a capabilities\-only environment" +.SS "securebits フラグ: ケーパビリティだけの環境を構築する" .\" For some background: .\" see http://lwn.net/Articles/280279/ and .\" http://article.gmane.org/gmane.linux.kernel.lsm/5476/ @@ -659,10 +659,10 @@ prctl(PR_SET_SECUREBITS, .in .SH 準拠 .PP -No standards govern capabilities, but the Linux capability implementation is -based on the withdrawn POSIX.1e draft standard; see -.UR http://wt.tuxomania.net\:/publications\:/posix.1e/ -.UE . +ケーパビリティに関する標準はないが、 Linux のケーパビリティは廃案になった POSIX.1e 草案に基づいて実装されている。 +.UR http://wt.xpilot.org\:/publications\:/posix.1e/ +.UE +を参照。 .SH 注意 カーネル 2.5.27 以降、ケーパビリティは選択式のカーネルコンポーネント となっており、カーネル設定オプション CONFIG_SECURITY_CAPABILITIES により有効/無効を切り替えることができる。 @@ -696,7 +696,7 @@ capabilities (above \fBCAP_LAST_CAP\fP) are shown as disabled (0). \fBcap_get_proc\fP(3), \fBcap_init\fP(3), \fBcapgetp\fP(3), \fBcapsetp\fP(3), \fBlibcap\fP(3), \fBcredentials\fP(7), \fBpthreads\fP(7), \fBgetcap\fP(8), \fBsetcap\fP(8) .PP -\fIinclude/linux/capability.h\fP in the Linux kernel source tree +Linux カーネルソース内の \fIinclude/linux/capability.h\fP .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部 である。プロジェクトの説明とバグ報告に関する情報は diff --git a/release/man7/credentials.7 b/release/man7/credentials.7 index dc8657a1..d00eea84 100644 --- a/release/man7/credentials.7 +++ b/release/man7/credentials.7 @@ -53,12 +53,12 @@ PID は各種のシステムコールでそのシステムコールが作用す \fBsigqueue\fP(3), \fBwaitpid\fP(2). プロセスの PID は \fBexecve\fP(2) の前後で不変である。 -.SS "Parent process ID (PPID)" +.SS "親プロセス ID (PPID)" プロセスの親プロセスの ID は、 \fBfork\fP(2) を使ってそのプロセスを生成したプロセスを示す。 プロセスは \fBgetppid\fP(2) を使って自分の PPID を取得できる。 PPID は \fIpid_t\fP 型で表現される。 プロセスの PPID は \fBexecve\fP(2) の前後で不変である。 -.SS "Process group ID and session ID" +.SS "プロセスグループ ID とセッション ID" 各プロセスはセッション ID とプロセスグループ ID を持つ。 これらの ID はどちらも \fIpid_t\fP 型で表現される。 プロセスは、それぞれ \fBgetsid\fP(2), \fBgetpgrp\fP(2) を使って自分のセッション ID、プロセスグループ ID を取得できる。 @@ -76,7 +76,7 @@ PID は各種のシステムコールでそのシステムコールが作用す 新たなセッションの生成はプロセスが \fBsetsid\fP(2) を呼び出すことで行う。 \fBsetsid\fP(2) は、 \fBsetsid\fP(2) を呼び出したプロセスの PID と同じ値のセッション ID を持つ 新たなセッションを生成する。 セッションの生成者は「セッション・リーダー」と呼ばれる。 -.SS "User and group identifiers" +.SS "ユーザ ID とグループ ID" 各プロセスは、数種類のユーザ ID とグループ ID を持つ。 ユーザ ID、グループ ID は整数で、それぞれ \fIuid_t\fP, \fIgid_t\fP 型で表現される (これらは \fI\fP で定義されている)。 diff --git a/release/man7/signal.7 b/release/man7/signal.7 index 4d1a8857..15b04433 100644 --- a/release/man7/signal.7 +++ b/release/man7/signal.7 @@ -54,7 +54,7 @@ signal \- シグナルの概要 .SH 説明 Linux は POSIX 信頼シグナル (reliable signal; 以後 "標準シグナル"と表記) と POSIX リアルタイムシグナルの両方に対応している。 -.SS "Signal dispositions" +.SS シグナル処理方法 シグナルはそれぞれ現在の「処理方法 (disposition)」を保持しており、 この処理方法によりシグナルが配送された際にプロセスが どのような振舞いをするかが決まる。 @@ -84,7 +84,7 @@ Linux は POSIX 信頼シグナル (reliable signal; 以後 "標準シグナル" \fBfork\fP(2) 経由で作成された子プロセスは、親プロセスのシグナルの処理方法の コピーを継承する。 \fBexecve\fP(2) の前後で、ハンドラが設定されているシグナルの処理方法はデフォルトにリセットされ、 無視が設定されているシグナルの処理方法は変更されずそのままとなる。 -.SS "Sending a signal" +.SS シグナルの送信 以下のシステムコールとライブラリ関数を使って、 呼び出し者はシグナルを送信することができる。 .TP 16 \fBraise\fP(3) @@ -104,7 +104,7 @@ Linux は POSIX 信頼シグナル (reliable signal; 以後 "標準シグナル" .TP \fBsigqueue\fP(3) 指定されたプロセスに付属データとともにリアルタイムシグナルを送る。 -.SS "Waiting for a signal to be caught" +.SS シグナルが捕捉されるのを待つ 以下のシステムコールを使って、シグナルが捕捉されるまで 呼び出したプロセスやスレッドの実行を中断 (suspend) することができる (ハンドラが設定されていないシグナルによりそのプロセスが終了した 場合にも実行の停止は終了する)。 .TP 16 @@ -113,7 +113,7 @@ Linux は POSIX 信頼シグナル (reliable signal; 以後 "標準シグナル" .TP \fBsigsuspend\fP(2) 一時的にシグナルマスク (下記参照) を変更し、 マスクされていないシグナルのいずれかが捕捉されるまで 実行を中断する。 -.SS "Synchronously accepting a signal" +.SS シグナルの同期受信 シグナルハンドラ経由でシグナルを非同期 (asynchronously) で捕捉する以外にも、 シグナルを同期 (synchronously) して受け付けることもできる。 同期して受け付けるとは、シグナルが配送されるまで実行を停止 (block) するということである。シグナルを受け付けた際に、カーネルは そのシグナルに関する情報を呼び出し者に返す。 これを行う一般的な方法が二つある。 @@ -125,7 +125,7 @@ Linux は POSIX 信頼シグナル (reliable signal; 以後 "標準シグナル" このファイルディスクリプタからの \fBread\fP(2) は、 \fBsignalfd\fP(2) の呼び出し時に指定されたシグナル集合のシグナルの一つが呼び出し元に 配送されるまで停止 (block) する。 \fBread\fP(2) が返すバッファにはシグナルに関する情報を格納した構造体が入っている。 -.SS "Signal mask and pending signals" +.SS シグナルマスクと処理待ちシグナル シグナルは \fIブロック (block)\fP されることがある。ブロックされると、そのシグナルは その後ブロックを解除されるまで配送されなくなる。 シグナルが生成されてから配送されるまでの間、そのシグナルは \fI処理待ち (pending)\fP であると呼ばれる。 @@ -148,14 +148,14 @@ Linux は POSIX 信頼シグナル (reliable signal; 以後 "標準シグナル" \fBfork\fP(2) 経由で作成された子プロセスでは、処理待ちのシグナル集合は空の集合で初期化される。 \fBexecve\fP(2) の前後で、処理待ちのシグナル集合は保持される。 -.SS "Standard signals" -Linux supports the standard signals listed below. Several signal numbers -are architecture\-dependent, as indicated in the "Value" column. (Where -three values are given, the first one is usually valid for alpha and sparc, -the middle one for x86, arm, and most other architectures, and the last one -for mips. (Values for parisc are \fInot\fP shown; see the Linux kernel source -for signal numbering on that architecture.) A \- denotes that a signal is -absent on the corresponding architecture.) +.SS 標準シグナル +Linux は以下に示す標準シグナルに対応している。シグナル番号の一部はアー +キテクチャ依存であり、"値" 欄に示す通りである。 (3つの値が書かれている +ものは、 1つ目が alpha と sparc で通常有効な値、 真ん中が x86, arm や +他のほとんどのアーキテクチャでの有効な値、最後が mips での値である。 +(parisc での値は記載されて\fIいない\fP。 parisc でのシグナル番号は +Linux カーネルソースを参照してほしい)。 \- はそのアーキテ +クチャにおいて対応するシグナルがないことを示す。) 最初に、POSIX.1\-1990 に定義されているシグナルを示す。 .TS @@ -181,9 +181,9 @@ SIGUSR2 31,12,17 Term ユーザ定義シグナル 2 SIGCHLD 20,17,18 Ign 子プロセスの一時停止 (stop) または終了 SIGCONT 19,18,25 Cont 一時停止 (stop) からの再開 SIGSTOP 17,19,23 Stop プロセスの一時停止 (stop) -SIGTSTP 18,20,24 Stop Stop typed at terminal -SIGTTIN 21,21,26 Stop Terminal input for background process -SIGTTOU 22,22,27 Stop Terminal output for background process +SIGTSTP 18,20,24 Stop 端末より入力された一時停止 (stop) +SIGTTIN 21,21,26 Stop バックグランドプロセスの端末入力 +SIGTTOU 22,22,27 Stop バックグランドプロセスの端末出力 .TE シグナル \fBSIGKILL\fP と \fBSIGSTOP\fP はキャッチ、ブロック、無視できない。 @@ -241,7 +241,7 @@ SIGUNUSED \-,31,\- Core \fBSIGSYS\fP と同義 .\" parisc is the only exception: SIGSYS is 12, SIGUNUSED is 31 \fBSIGUNUSED\fP が定義されている場合には、ほとんどのアーキテクチャで \fBSIGSYS\fP の同義語となっている。 -.SS "Real\-time signals" +.SS リアルタイムシグナル Linux はリアルタイムシグナルをサポートしている。 リアルタイムシグナルは元々 POSIX.1b のリアルタイム拡張で定義されて いるものであり、現在では POSIX.1\-2001 に含まれている。 対応しているリアルタイムシグナルの範囲は、マクロ \fBSIGRTMIN\fP と \fBSIGRTMAX\fP で定義される。 POSIX.1\-2001 では、少なくとも \fB_POSIX_RTSIG_MAX\fP (8) @@ -445,7 +445,7 @@ utimensat() utimes() .fi .in -.SS "Interruption of system calls and library functions by signal handlers" +.SS シグナルハンドラによるシステムコールやライブラリ関数への割り込み システムコールやライブラリが停止 (block) している間にシグナルハンドラが 起動されると、以下のどちらかとなる。 .IP * 2 シグナルが返った後、呼び出しは自動的に再スタートされる。 @@ -521,7 +521,7 @@ System V IPC インターフェイス: \fBmsgrcv\fP(2), \fBmsgsnd\fP(2), \fBsemo .RE .PP \fBsleep\fP(3) 関数も、ハンドラにより割り込まれた場合、決して再スタートされることはない。 しかし、成功となり、残っている停止時間を返す。 -.SS "Interruption of system calls and library functions by stop signals" +.SS 一時停止シグナルによるシステムコールやライブラリ関数への割り込み Linux では、シグナルハンドラが設定されていない場合でも、 いくつかのブロッキング型のインターフェイスは、 プロセスが一時停止 (stop) シグナルの一つにより停止され、 \fBSIGCONT\fP により再開された後に、エラー \fBEINTR\fP で失敗する可能性がある。 この挙動は POSIX.1 で認められておらず、他のシステムでは起こらない。 diff --git a/release/man7/svipc.7 b/release/man7/svipc.7 index cd1eab27..0a406866 100644 --- a/release/man7/svipc.7 +++ b/release/man7/svipc.7 @@ -43,10 +43,9 @@ svipc \- System V プロセス間通信機構 おける実装を説明する。 このプロセス間通信機構には、 メッセージキュー (message queue)、セマフォー集合 (semaphore set)、 共有メモリセグメント (shared memory segment) などがある。以下で \fI資源 (resource)\fP という用語を使用した場合にはこれらの機構のどれかを意味する。 -.SS "Resource access permissions" -For each resource, the system uses a common structure of type \fIstruct -ipc_perm\fP to store information needed in determining permissions to perform -an IPC operation. The \fIipc_perm\fP structure includes the following members: +.SS 資源へのアクセス許可 +システムのそれぞれの資源は、IPC への操作を許可するかどうかを決定する ための情報を共通の構造体 \fIstruct ipc_perm\fP +に格納して使用する。 \fIipc_perm\fP 構造体には以下のメンバーが定義されている: .in +4n .nf @@ -102,7 +101,7 @@ struct ipc_perm { .PP \fBIPC_PRIVATE\fP は \fIkey_t\fP 型である。その他の全てのシンボルはフラグフィールドとして \fIint\fP 変数に OR 演算で格納することができる。 -.SS "Message queues" +.SS メッセージキュー メッセージキューは正の整数 (\fImsqid\fP) によって識別され、 \fI\fP に定義されている構造体 \fIstruct msqid_ds\fP に結びつけられている。 この構造体は以下のメンバーを含んでいる: .in +4n @@ -144,7 +143,7 @@ struct msqid_ds { .TP \fImsg_ctime\fP 最後に \fImsqid_ds\fP 構造体のメンバーが変更された時間。 -.SS "Semaphore sets" +.SS セマフォー集合 セマフォー集合は正の整数 (\fIsemid\fP) によって識別され、 \fI\fP に定義されている構造体 \fIstruct semid_ds\fP に結びつけられている。 この構造体は以下のメンバーを含んでいる: .in +4n @@ -200,7 +199,7 @@ struct sem { .\".I semval .\"to become zero. このセマフォーを最後に操作したプロセスの ID。 -.SS "Shared memory segments" +.SS 共有メモリセグメント 共有メモリセグメントは正の整数 (\fIshmid\fP) によって識別され、 \fI\fP に定義されている \fIstruct shmid_ds\fP 構造体に結びつけられている。 この構造体は以下のメンバーを含んでいる: .in +4n -- 2.11.0