# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2015-01-23 22:25+0900\n" "PO-Revision-Date: 2015-01-25 07:23+0900\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: TH #: build/C/man3/CPU_SET.3:27 #, no-wrap msgid "CPU_SET" msgstr "CPU_SET" #. type: TH #: build/C/man3/CPU_SET.3:27 #, no-wrap msgid "2012-03-15" msgstr "2012-03-15" #. type: TH #: build/C/man3/CPU_SET.3:27 build/C/man2/clone.2:42 build/C/man2/kcmp.2:28 #: build/C/man2/sched_get_priority_max.2:29 build/C/man3/sched_getcpu.3:26 #: build/C/man2/sched_rr_get_interval.2:29 build/C/man2/sched_setaffinity.2:34 #: build/C/man2/sched_setattr.2:26 build/C/man2/sched_setparam.2:30 #: build/C/man2/sched_setscheduler.2:26 build/C/man2/sched_yield.2:29 #: build/C/man7/sched.7:32 build/C/man2/setns.2:8 build/C/man2/unshare.2:20 #, no-wrap msgid "Linux" msgstr "Linux" #. type: TH #: build/C/man3/CPU_SET.3:27 build/C/man2/clone.2:42 build/C/man2/kcmp.2:28 #: build/C/man2/sched_get_priority_max.2:29 build/C/man3/sched_getcpu.3:26 #: build/C/man2/sched_rr_get_interval.2:29 build/C/man2/sched_setaffinity.2:34 #: build/C/man2/sched_setattr.2:26 build/C/man2/sched_setparam.2:30 #: build/C/man2/sched_setscheduler.2:26 build/C/man2/sched_yield.2:29 #: build/C/man7/sched.7:32 build/C/man2/setns.2:8 build/C/man2/unshare.2:20 #, no-wrap msgid "Linux Programmer's Manual" msgstr "Linux Programmer's Manual" #. type: SH #: build/C/man3/CPU_SET.3:28 build/C/man2/clone.2:43 build/C/man2/kcmp.2:29 #: build/C/man2/sched_get_priority_max.2:30 build/C/man3/sched_getcpu.3:27 #: build/C/man2/sched_rr_get_interval.2:30 build/C/man2/sched_setaffinity.2:35 #: build/C/man2/sched_setattr.2:27 build/C/man2/sched_setparam.2:31 #: build/C/man2/sched_setscheduler.2:27 build/C/man2/sched_yield.2:30 #: build/C/man7/sched.7:33 build/C/man2/setns.2:9 build/C/man2/unshare.2:21 #, no-wrap msgid "NAME" msgstr "名前" #. type: Plain text #: build/C/man3/CPU_SET.3:35 msgid "CPU_SET, CPU_CLR, CPU_ISSET, CPU_ZERO, CPU_COUNT, CPU_AND, CPU_OR, CPU_XOR, CPU_EQUAL, CPU_ALLOC, CPU_ALLOC_SIZE, CPU_FREE, CPU_SET_S, CPU_CLR_S, CPU_ISSET_S, CPU_ZERO_S, CPU_COUNT_S, CPU_AND_S, CPU_OR_S, CPU_XOR_S, CPU_EQUAL_S - macros for manipulating CPU sets" msgstr "CPU_SET, CPU_CLR, CPU_ISSET, CPU_ZERO, CPU_COUNT, CPU_AND, CPU_OR, CPU_XOR, CPU_EQUAL, CPU_ALLOC, CPU_ALLOC_SIZE, CPU_FREE, CPU_SET_S, CPU_CLR_S, CPU_ISSET_S, CPU_ZERO_S, CPU_COUNT_S, CPU_AND_S, CPU_OR_S, CPU_XOR_S, CPU_EQUAL_S - CPU 集合を操作するためのマクロ" #. type: SH #: build/C/man3/CPU_SET.3:35 build/C/man2/clone.2:45 build/C/man2/kcmp.2:31 #: build/C/man2/sched_get_priority_max.2:32 build/C/man3/sched_getcpu.3:29 #: build/C/man2/sched_rr_get_interval.2:32 build/C/man2/sched_setaffinity.2:38 #: build/C/man2/sched_setattr.2:30 build/C/man2/sched_setparam.2:33 #: build/C/man2/sched_setscheduler.2:30 build/C/man2/sched_yield.2:32 #: build/C/man2/setns.2:11 build/C/man2/unshare.2:23 #, no-wrap msgid "SYNOPSIS" msgstr "書式" #. type: Plain text #: build/C/man3/CPU_SET.3:39 build/C/man2/sched_setaffinity.2:42 #: build/C/man2/setns.2:15 #, no-wrap msgid "" "B<#define _GNU_SOURCE> /* See feature_test_macros(7) */\n" "B<#include Esched.hE>\n" msgstr "" "B<#define _GNU_SOURCE> /* feature_test_macros(7) 参照 */\n" "B<#include Esched.hE>\n" #. type: Plain text #: build/C/man3/CPU_SET.3:41 #, no-wrap msgid "BIB<);>\n" msgstr "BIB<);>\n" #. type: Plain text #: build/C/man3/CPU_SET.3:45 #, no-wrap msgid "" "BIB<, cpu_set_t *>IB<);>\n" "BIB<, cpu_set_t *>IB<);>\n" "BIB<, cpu_set_t *>IB<);>\n" msgstr "" "BIB<, cpu_set_t *>IB<);>\n" "BIB<, cpu_set_t *>IB<);>\n" "BIB<, cpu_set_t *>IB<);>\n" #. type: Plain text #: build/C/man3/CPU_SET.3:47 #, no-wrap msgid "BIB<);>\n" msgstr "BIB<);>\n" #. type: Plain text #: build/C/man3/CPU_SET.3:54 #, no-wrap msgid "" "BIB<,>\n" "B< cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" "BIB<,>\n" "B< cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" "BIB<,>\n" "B< cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" msgstr "" "BIB<,>\n" "B< cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" "BIB<,>\n" "B< cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" "BIB<,>\n" "B< cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" #. type: Plain text #: build/C/man3/CPU_SET.3:56 #, no-wrap msgid "BIB<, cpu_set_t *>IB<);>\n" msgstr "BIB<, cpu_set_t *>IB<);>\n" #. type: Plain text #: build/C/man3/CPU_SET.3:60 #, no-wrap msgid "" "BIB<);>\n" "BIB<);>\n" "BIB<);>\n" msgstr "" "BIB<);>\n" "BIB<);>\n" "BIB<);>\n" #. type: Plain text #: build/C/man3/CPU_SET.3:62 #, no-wrap msgid "BIB<, cpu_set_t *>IB<);>\n" msgstr "BIB<, cpu_set_t *>IB<);>\n" #. type: Plain text #: build/C/man3/CPU_SET.3:66 #, no-wrap msgid "" "BIB<, size_t >IB<, cpu_set_t *>IB<);>\n" "BIB<, size_t >IB<, cpu_set_t *>IB<);>\n" "BIB<, size_t >IB<, cpu_set_t *>IB<);>\n" msgstr "" "BIB<, size_t >IB<, cpu_set_t *>IB<);>\n" "BIB<, size_t >IB<, cpu_set_t *>IB<);>\n" "BIB<, size_t >IB<, cpu_set_t *>IB<);>\n" #. type: Plain text #: build/C/man3/CPU_SET.3:68 #, no-wrap msgid "BIB<, cpu_set_t *>IB<);>\n" msgstr "BIB<, cpu_set_t *>IB<);>\n" #. type: Plain text #: build/C/man3/CPU_SET.3:75 #, no-wrap msgid "" "BIB<, cpu_set_t *>IB<,>\n" "B< cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" "BIB<, cpu_set_t *>IB<,>\n" "B< cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" "BIB<, cpu_set_t *>IB<,>\n" "B< cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" msgstr "" "BIB<, cpu_set_t *>IB<,>\n" "B< cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" "BIB<, cpu_set_t *>IB<,>\n" "B< cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" "BIB<, cpu_set_t *>IB<,>\n" "B< cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" #. type: Plain text #: build/C/man3/CPU_SET.3:78 #, no-wrap msgid "BIB<, cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" msgstr "BIB<, cpu_set_t *>IB<, cpu_set_t *>IB<);>\n" #. type: SH #: build/C/man3/CPU_SET.3:79 build/C/man2/clone.2:83 build/C/man2/kcmp.2:41 #: build/C/man2/sched_get_priority_max.2:38 build/C/man3/sched_getcpu.3:55 #: build/C/man2/sched_rr_get_interval.2:36 build/C/man2/sched_setaffinity.2:49 #: build/C/man2/sched_setattr.2:41 build/C/man2/sched_setparam.2:47 #: build/C/man2/sched_setscheduler.2:41 build/C/man2/sched_yield.2:36 #: build/C/man7/sched.7:35 build/C/man2/setns.2:18 build/C/man2/unshare.2:50 #, no-wrap msgid "DESCRIPTION" msgstr "説明" #. type: Plain text #: build/C/man3/CPU_SET.3:86 msgid "The I data structure represents a set of CPUs. CPU sets are used by B(2) and similar interfaces." msgstr "I データ構造体は CPU 集合を表現している。 CPU 集合は B(2) や同様のインタフェースで使用されている。" #. type: Plain text #: build/C/man3/CPU_SET.3:93 msgid "The I data type is implemented as a bit set. However, the data structure treated as considered opaque: all manipulation of CPU sets should be done via the macros described in this page." msgstr "I データ型はビット集合として実装されている。 しかし、 データ構造体はその実装を意識せずに扱うものとされており、 CPU 集合のすべての操作は、 このページで説明されているマクロを通して行うべきである。" #. type: Plain text #: build/C/man3/CPU_SET.3:96 msgid "The following macros are provided to operate on the CPU set I:" msgstr "以下のマクロが CPU 集合 I を操作するために提供されている。" #. type: TP #: build/C/man3/CPU_SET.3:96 #, no-wrap msgid "B()" msgstr "B()" #. type: Plain text #: build/C/man3/CPU_SET.3:101 msgid "Clears I, so that it contains no CPUs." msgstr "I をクリアする。 集合には何も CPU が含まれない状態となる。" #. type: TP #: build/C/man3/CPU_SET.3:101 #, no-wrap msgid "B()" msgstr "B()" #. type: Plain text #: build/C/man3/CPU_SET.3:107 msgid "Add CPU I to I." msgstr "I に I を追加する。" #. type: TP #: build/C/man3/CPU_SET.3:107 #, no-wrap msgid "B()" msgstr "B()" #. type: Plain text #: build/C/man3/CPU_SET.3:113 msgid "Remove CPU I from I." msgstr "I から I を削除する。" #. type: TP #: build/C/man3/CPU_SET.3:113 #, no-wrap msgid "B()" msgstr "B()" #. type: Plain text #: build/C/man3/CPU_SET.3:119 msgid "Test to see if CPU I is a member of I." msgstr "CPU I が I のメンバーであるかを検査する。" #. type: TP #: build/C/man3/CPU_SET.3:119 #, no-wrap msgid "B()" msgstr "B()" #. type: Plain text #: build/C/man3/CPU_SET.3:123 msgid "Return the number of CPUs in I." msgstr "I に含まれる CPU 数を返す。" #. type: Plain text #: build/C/man3/CPU_SET.3:128 msgid "Where a I argument is specified, it should not produce side effects, since the above macros may evaluate the argument more than once." msgstr "I 引き数が指定する場合、 その引き数は副作用を伴うべきではない。 上記のマクロは引き数を複数回評価する可能性があるからである。" #. type: Plain text #: build/C/man3/CPU_SET.3:139 msgid "The first available CPU on the system corresponds to a I value of 0, the next CPU corresponds to a I value of 1, and so on. The constant B (currently 1024) specifies a value one greater than the maximum CPU number that can be stored in I." msgstr "そのシステムで利用可能な最初の CPU が I 値 0 に対応し、 次の CPU が I 値 1 に対応し、 以降も同様である。 定数 B (現在のところ 1024) は I に格納できる最大 CPU 数よりも大きな値である。" #. type: Plain text #: build/C/man3/CPU_SET.3:141 msgid "The following macros perform logical operations on CPU sets:" msgstr "以下のマクロは CPU 集合どうしの論理操作を行う。" #. type: TP #: build/C/man3/CPU_SET.3:141 #, no-wrap msgid "B()" msgstr "B()" #. type: Plain text #: build/C/man3/CPU_SET.3:150 msgid "Store the intersection of the sets I and I in I (which may be one of the source sets)." msgstr "集合 I と I の積集合を I に格納する (元の集合のいずれかが I として使用される場合もある)。" #. type: TP #: build/C/man3/CPU_SET.3:150 #, no-wrap msgid "B()" msgstr "B()" #. type: Plain text #: build/C/man3/CPU_SET.3:159 msgid "Store the union of the sets I and I in I (which may be one of the source sets)." msgstr "集合 I と I の和集合を I に格納する (元の集合のいずれかが I として使用される場合もある)。" #. type: TP #: build/C/man3/CPU_SET.3:159 #, no-wrap msgid "B()" msgstr "B()" #. type: Plain text #: build/C/man3/CPU_SET.3:173 msgid "Store the XOR of the sets I and I in I (which may be one of the source sets). The XOR means the set of CPUs that are in either I or I, but not both." msgstr "集合 I と I の XOR を I に格納する (元の集合のいずれかが I として使用される場合もある)。 XOR とは、 I か I のいずれかに含まれるが、両方には含まれない集合のことである。" #. type: TP #: build/C/man3/CPU_SET.3:173 #, no-wrap msgid "B()" msgstr "B()" #. type: Plain text #: build/C/man3/CPU_SET.3:176 msgid "Test whether two CPU set contain exactly the same CPUs." msgstr "二つの CPU 集合が全く同じ CPU を含んでいるかを検査する。" #. type: SS #: build/C/man3/CPU_SET.3:176 #, no-wrap msgid "Dynamically sized CPU sets" msgstr "動的に大きさが決まる CPU 集合" #. type: Plain text #: build/C/man3/CPU_SET.3:182 msgid "Because some applications may require the ability to dynamically size CPU sets (e.g., to allocate sets larger than that defined by the standard I data type), glibc nowadays provides a set of macros to support this." msgstr "いくつかのアプリケーションでは CPU 集合の大きさを動的に決める能力 (例えば、 標準の I データ型で定義されたよりも大きい集合を割り当てるなど) が必要となることがあるため、 現在 glibc はこれに対応するためにいくつかのマクロを提供している。" #. type: Plain text #: build/C/man3/CPU_SET.3:184 msgid "The following macros are used to allocate and deallocate CPU sets:" msgstr "以下のマクロを使うと CPU 集合の割り当てと解放ができる。" #. type: TP #: build/C/man3/CPU_SET.3:184 #, no-wrap msgid "B()" msgstr "B()" #. type: Plain text #: build/C/man3/CPU_SET.3:189 msgid "Allocate a CPU set large enough to hold CPUs in the range 0 to I." msgstr "0 から I までの範囲の CPU を保持するのに十分な大きさの CPU 集合を割り当てる。" #. type: TP #: build/C/man3/CPU_SET.3:189 #, no-wrap msgid "B()" msgstr "B()" #. type: Plain text #: build/C/man3/CPU_SET.3:199 msgid "Return the size in bytes of the CPU set that would be needed to hold CPUs in the range 0 to I. This macro provides the value that can be used for the I argument in the B() macros described below." msgstr "0 から I までの範囲の CPU を保持するのに必要な CPU 集合の大きさをバイト数で返す。 このマクロが返す値は、 後述の B() マクロの I 引き数として使用できる。" #. type: TP #: build/C/man3/CPU_SET.3:199 #, no-wrap msgid "B()" msgstr "B()" #. type: Plain text #: build/C/man3/CPU_SET.3:203 msgid "Free a CPU set previously allocated by B()." msgstr "以前に B() で割り当てられた CPU 集合を解放する。" #. type: Plain text #: build/C/man3/CPU_SET.3:210 msgid "The macros whose names end with \"_S\" are the analogs of the similarly named macros without the suffix. These macros perform the same tasks as their analogs, but operate on the dynamically allocated CPU set(s) whose size is I bytes." msgstr "名前が \"_S\" で終わるマクロは \"_S\" なしの同じ名前のマクロと同等である。 これらのマクロは \"_S\" なしのものと同じ動作をするが、 動的に割り当てられた、 大きさが I バイトの CPU 集合に対して操作を行う点が異なる。" #. type: SH #: build/C/man3/CPU_SET.3:210 build/C/man2/clone.2:873 build/C/man2/kcmp.2:127 #: build/C/man2/sched_get_priority_max.2:97 build/C/man3/sched_getcpu.3:58 #: build/C/man2/sched_rr_get_interval.2:73 #: build/C/man2/sched_setaffinity.2:107 build/C/man2/sched_setattr.2:262 #: build/C/man2/sched_setparam.2:87 build/C/man2/sched_setscheduler.2:135 #: build/C/man2/sched_yield.2:41 build/C/man2/setns.2:138 #: build/C/man2/unshare.2:277 #, no-wrap msgid "RETURN VALUE" msgstr "返り値" #. type: Plain text #: build/C/man3/CPU_SET.3:219 msgid "B() and B() return nonzero if I is in I; otherwise, it returns 0." msgstr "B() と B() は、 I が I に含まれていれば 0 以外を返し、含まれない場合 0 を返す。" #. type: Plain text #: build/C/man3/CPU_SET.3:225 msgid "B() and B() return the number of CPUs in I." msgstr "B() と B() は I に含まれる CPU 数を返す。" #. type: Plain text #: build/C/man3/CPU_SET.3:230 msgid "B() and B() return nonzero if the two CPU sets are equal; otherwise it returns 0." msgstr "B() と B() は、 二つの CPU 集合が等しければ 0 以外を返し、 等しくない場合 0 を返す。" #. type: Plain text #: build/C/man3/CPU_SET.3:235 msgid "B() returns a pointer on success, or NULL on failure. (Errors are as for B(3).)" msgstr "B() は成功するとポインターを返し、 失敗すると NULL を返す (エラーは B(3) と同じである)。" #. type: Plain text #: build/C/man3/CPU_SET.3:239 msgid "B() returns the number of bytes required to store a CPU set of the specified cardinality." msgstr "B() は指定された大きさの CPU 集合を格納するのに必要なバイト数を返す。" #. type: Plain text #: build/C/man3/CPU_SET.3:241 msgid "The other functions do not return a value." msgstr "他の関数は値を返さない。" #. type: SH #: build/C/man3/CPU_SET.3:241 build/C/man2/clone.2:1031 #: build/C/man2/kcmp.2:198 build/C/man3/sched_getcpu.3:70 #: build/C/man2/sched_setaffinity.2:148 build/C/man2/sched_setattr.2:348 #: build/C/man2/setns.2:186 build/C/man2/unshare.2:330 #, no-wrap msgid "VERSIONS" msgstr "バージョン" #. type: Plain text #: build/C/man3/CPU_SET.3:249 msgid "The B(), B(), B(), and B() macros were added in glibc 2.3.3." msgstr "マクロ B(), B(), B(), B() は glibc 2.3.3 で追加された。" #. type: Plain text #: build/C/man3/CPU_SET.3:252 msgid "B() first appeared in glibc 2.6." msgstr "B() は glibc 2.6 で初めて登場した。" #. type: Plain text #: build/C/man3/CPU_SET.3:270 msgid "B(), B(), B(), B(), B(), B(), B(), B(), B(), B(), B(), B(), B(), B(), and B() first appeared in glibc 2.7." msgstr "B(), B(), B(), B(), B(), B(), B(), B(), B(), B(), B(), B(), B(), B(), B() は glibc 2.7 で初めて登場した。" #. type: SH #: build/C/man3/CPU_SET.3:270 build/C/man2/clone.2:1038 #: build/C/man2/kcmp.2:202 build/C/man2/sched_get_priority_max.2:113 #: build/C/man3/sched_getcpu.3:77 build/C/man2/sched_rr_get_interval.2:94 #: build/C/man2/sched_setaffinity.2:159 build/C/man2/sched_setattr.2:351 #: build/C/man2/sched_setparam.2:119 build/C/man2/sched_setscheduler.2:170 #: build/C/man2/sched_yield.2:52 build/C/man2/setns.2:191 #: build/C/man2/unshare.2:334 #, no-wrap msgid "CONFORMING TO" msgstr "準拠" #. type: Plain text #: build/C/man3/CPU_SET.3:272 msgid "These interfaces are Linux-specific." msgstr "これらのインタフェースは Linux 固有である。" #. type: SH #: build/C/man3/CPU_SET.3:272 build/C/man2/clone.2:1042 #: build/C/man2/kcmp.2:205 build/C/man3/sched_getcpu.3:80 #: build/C/man2/sched_rr_get_interval.2:96 #: build/C/man2/sched_setaffinity.2:161 build/C/man2/sched_setattr.2:353 #: build/C/man2/sched_setparam.2:121 build/C/man2/sched_setscheduler.2:173 #: build/C/man2/sched_yield.2:54 build/C/man7/sched.7:611 #: build/C/man2/setns.2:195 build/C/man2/unshare.2:338 #, no-wrap msgid "NOTES" msgstr "注意" #. type: Plain text #: build/C/man3/CPU_SET.3:275 msgid "To duplicate a CPU set, use B(3)." msgstr "CPU 集合を複製するには、 B(3) を使用する。" #. type: Plain text #: build/C/man3/CPU_SET.3:282 msgid "Since CPU sets are bit sets allocated in units of long words, the actual number of CPUs in a dynamically allocated CPU set will be rounded up to the next multiple of I. An application should consider the contents of these extra bits to be undefined." msgstr "CPU 集合はロングワード単位に割り当てられるビット集合なので、 動的に割り当てられた CPU 集合の実際の CPU 数は I の次の倍数に切り上げられることになる。 アプリケーションは、 これらの余分なビットの内容は不定と考えるべきである。" #. type: Plain text #: build/C/man3/CPU_SET.3:294 msgid "Notwithstanding the similarity in the names, note that the constant B indicates the number of CPUs in the I data type (thus, it is effectively a count of bits in the bit set), while the I argument of the B() macros is a size in bytes." msgstr "名前は似ているが、 定数 B は I データ型に含まれる CPU 数 (つまり、事実上ビット集合内のビットカウント) を示すのに対して、 マクロ B() の I 引き数はバイト単位のサイズである点に注意すること。" #. type: Plain text #: build/C/man3/CPU_SET.3:300 msgid "The data types for arguments and return values shown in the SYNOPSIS are hints what about is expected in each case. However, since these interfaces are implemented as macros, the compiler won't necessarily catch all type errors if you violate the suggestions." msgstr "「書式」に書かれている引き数と返り値のデータ型は、それぞれの場合でどんな型が期待されるかのヒントである。 しかしながら、 これらのインタフェースはマクロとして実装されているため、 このヒントを守らなかった場合に、 コンパイラが必ずしも全ての型エラーを捕捉できるとは限らない。" #. type: SH #: build/C/man3/CPU_SET.3:300 build/C/man2/clone.2:1067 #: build/C/man2/sched_setattr.2:369 build/C/man2/sched_setscheduler.2:214 #, no-wrap msgid "BUGS" msgstr "バグ" #. http://sourceware.org/bugzilla/show_bug.cgi?id=7029 #. type: Plain text #: build/C/man3/CPU_SET.3:312 msgid "On 32-bit platforms with glibc 2.8 and earlier, B() allocates twice as much space as is required, and B() returns a value twice as large as it should. This bug should not affect the semantics of a program, but does result in wasted memory and less efficient operation of the macros that operate on dynamically allocated CPU sets. These bugs are fixed in glibc 2.9." msgstr "glibc 2.8 以前の 32 ビットプラットフォームでは、 B() は必要な空間の割り当てを二度行い、 B() は本来あるべき値の二倍の値を返す。 このバグはプログラムの動作には影響を与えないはずだが、 無駄にメモリを消費し、 動的に割り当てられた CPU 集合に対して操作を行うマクロの動作の効率が下がる結果となる。 これらのバグは glibc 2.9 で修正された。" #. type: SH #: build/C/man3/CPU_SET.3:312 build/C/man2/clone.2:1109 #: build/C/man2/setns.2:201 build/C/man2/unshare.2:372 #, no-wrap msgid "EXAMPLE" msgstr "例" #. type: Plain text #: build/C/man3/CPU_SET.3:315 msgid "The following program demonstrates the use of some of the macros used for dynamically allocated CPU sets." msgstr "以下のプログラムは、動的に割り当てた CPU 集合に対していくつかのマクロを使用する例を示している。" #. type: Plain text #: build/C/man3/CPU_SET.3:323 #, no-wrap msgid "" "#define _GNU_SOURCE\n" "#include Esched.hE\n" "#include Estdlib.hE\n" "#include Eunistd.hE\n" "#include Estdio.hE\n" "#include Eassert.hE\n" msgstr "" "#define _GNU_SOURCE\n" "#include Esched.hE\n" "#include Estdlib.hE\n" "#include Eunistd.hE\n" "#include Estdio.hE\n" "#include Eassert.hE\n" #. type: Plain text #: build/C/man3/CPU_SET.3:330 #, no-wrap msgid "" "int\n" "main(int argc, char *argv[])\n" "{\n" " cpu_set_t *cpusetp;\n" " size_t size;\n" " int num_cpus, cpu;\n" msgstr "" "int\n" "main(int argc, char *argv[])\n" "{\n" " cpu_set_t *cpusetp;\n" " size_t size;\n" " int num_cpus, cpu;\n" #. type: Plain text #: build/C/man3/CPU_SET.3:335 #, no-wrap msgid "" " if (argc E 2) {\n" " fprintf(stderr, \"Usage: %s Enum-cpusE\\en\", argv[0]);\n" " exit(EXIT_FAILURE);\n" " }\n" msgstr "" " if (argc E 2) {\n" " fprintf(stderr, \"Usage: %s Enum-cpusE\\en\", argv[0]);\n" " exit(EXIT_FAILURE);\n" " }\n" #. type: Plain text #: build/C/man3/CPU_SET.3:337 #, no-wrap msgid " num_cpus = atoi(argv[1]);\n" msgstr " num_cpus = atoi(argv[1]);\n" #. type: Plain text #: build/C/man3/CPU_SET.3:343 #, no-wrap msgid "" " cpusetp = CPU_ALLOC(num_cpus);\n" " if (cpusetp == NULL) {\n" " perror(\"CPU_ALLOC\");\n" " exit(EXIT_FAILURE);\n" " }\n" msgstr "" " cpusetp = CPU_ALLOC(num_cpus);\n" " if (cpusetp == NULL) {\n" " perror(\"CPU_ALLOC\");\n" " exit(EXIT_FAILURE);\n" " }\n" #. type: Plain text #: build/C/man3/CPU_SET.3:345 #, no-wrap msgid " size = CPU_ALLOC_SIZE(num_cpus);\n" msgstr " size = CPU_ALLOC_SIZE(num_cpus);\n" #. type: Plain text #: build/C/man3/CPU_SET.3:349 #, no-wrap msgid "" " CPU_ZERO_S(size, cpusetp);\n" " for (cpu = 0; cpu E num_cpus; cpu += 2)\n" " CPU_SET_S(cpu, size, cpusetp);\n" msgstr "" " CPU_ZERO_S(size, cpusetp);\n" " for (cpu = 0; cpu E num_cpus; cpu += 2)\n" " CPU_SET_S(cpu, size, cpusetp);\n" #. type: Plain text #: build/C/man3/CPU_SET.3:351 #, no-wrap msgid " printf(\"CPU_COUNT() of set: %d\\en\", CPU_COUNT_S(size, cpusetp));\n" msgstr " printf(\"CPU_COUNT() of set: %d\\en\", CPU_COUNT_S(size, cpusetp));\n" #. type: Plain text #: build/C/man3/CPU_SET.3:355 #, no-wrap msgid "" " CPU_FREE(cpusetp);\n" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" " CPU_FREE(cpusetp);\n" " exit(EXIT_SUCCESS);\n" "}\n" #. type: SH #: build/C/man3/CPU_SET.3:356 build/C/man2/clone.2:1206 #: build/C/man2/kcmp.2:222 build/C/man2/sched_get_priority_max.2:115 #: build/C/man3/sched_getcpu.3:100 build/C/man2/sched_rr_get_interval.2:132 #: build/C/man2/sched_setaffinity.2:226 build/C/man2/sched_setattr.2:385 #: build/C/man2/sched_setparam.2:127 build/C/man2/sched_setscheduler.2:222 #: build/C/man2/sched_yield.2:79 build/C/man7/sched.7:664 #: build/C/man2/setns.2:288 build/C/man2/unshare.2:459 #, no-wrap msgid "SEE ALSO" msgstr "関連項目" #. type: Plain text #: build/C/man3/CPU_SET.3:361 msgid "B(2), B(3), B(3), B(7)" msgstr "B(2), B(3), B(3), B(7)" #. type: SH #: build/C/man3/CPU_SET.3:361 build/C/man2/clone.2:1221 #: build/C/man2/kcmp.2:225 build/C/man2/sched_get_priority_max.2:125 #: build/C/man3/sched_getcpu.3:103 build/C/man2/sched_rr_get_interval.2:134 #: build/C/man2/sched_setaffinity.2:248 build/C/man2/sched_setattr.2:408 #: build/C/man2/sched_setparam.2:142 build/C/man2/sched_setscheduler.2:242 #: build/C/man2/sched_yield.2:81 build/C/man7/sched.7:702 #: build/C/man2/setns.2:295 build/C/man2/unshare.2:470 #, no-wrap msgid "COLOPHON" msgstr "この文書について" #. type: Plain text #: build/C/man3/CPU_SET.3:369 build/C/man2/clone.2:1229 #: build/C/man2/kcmp.2:233 build/C/man2/sched_get_priority_max.2:133 #: build/C/man3/sched_getcpu.3:111 build/C/man2/sched_rr_get_interval.2:142 #: build/C/man2/sched_setaffinity.2:256 build/C/man2/sched_setattr.2:416 #: build/C/man2/sched_setparam.2:150 build/C/man2/sched_setscheduler.2:250 #: build/C/man2/sched_yield.2:89 build/C/man7/sched.7:710 #: build/C/man2/setns.2:303 build/C/man2/unshare.2:478 msgid "This page is part of release 3.78 of the Linux I project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at \\%http://www.kernel.org/doc/man-pages/." msgstr "" "この man ページは Linux I プロジェクトのリリース 3.78 の一部\n" "である。プロジェクトの説明とバグ報告に関する情報は\n" "http://www.kernel.org/doc/man-pages/ に書かれている。" #. type: TH #: build/C/man2/clone.2:42 #, no-wrap msgid "CLONE" msgstr "CLONE" #. type: TH #: build/C/man2/clone.2:42 build/C/man2/unshare.2:20 #, no-wrap msgid "2014-09-21" msgstr "2014-09-21" #. type: Plain text #: build/C/man2/clone.2:45 msgid "clone, __clone2 - create a child process" msgstr "clone, __clone2 - 子プロセスを作成する" #. type: Plain text #: build/C/man2/clone.2:48 #, no-wrap msgid "/* Prototype for the glibc wrapper function */\n" msgstr "/* glibc ラッパー関数のプロトタイプ */\n" #. type: Plain text #: build/C/man2/clone.2:50 build/C/man3/sched_getcpu.3:32 #: build/C/man2/sched_setattr.2:33 build/C/man2/sched_setparam.2:36 #: build/C/man2/sched_setscheduler.2:33 build/C/man2/unshare.2:26 #, no-wrap msgid "B<#include Esched.hE>\n" msgstr "B<#include Esched.hE>\n" #. type: Plain text #: build/C/man2/clone.2:55 #, no-wrap msgid "" "BIB<)(void *), void *>IB<,>\n" "B< int >IB<, void *>IB<, ... >\n" "B< /* pid_t *>IB<, struct user_desc *>IB<, pid_t *>IB< */ );>\n" msgstr "" "BIB<)(void *), void *>IB<,>\n" "B< int >IB<, void *>IB<, ... >\n" "B< /* pid_t *>IB<, struct user_desc *>IB<, pid_t *>IB< */ );>\n" #. type: Plain text #: build/C/man2/clone.2:57 #, no-wrap msgid "/* Prototype for the raw system call */\n" msgstr "/* 素のシステムコールのプロトタイプ */\n" #. type: Plain text #: build/C/man2/clone.2:61 #, no-wrap msgid "" "BIB<, void *>IB<,>\n" "B< void *>IB<, void *>IB<,>\n" "B< struct pt_regs *>IB<);>\n" msgstr "" "BIB<, void *>IB<,>\n" "B< void *>IB<, void *>IB<,>\n" "B< struct pt_regs *>IB<);>\n" #. type: Plain text #: build/C/man2/clone.2:66 msgid "Feature Test Macro Requirements for glibc wrapper function (see B(7)):" msgstr "glibc ラッパー関数の機能検査マクロの要件 (B(7) 参照):" #. type: Plain text #: build/C/man2/clone.2:69 msgid "B():" msgstr "B():" #. type: TP #: build/C/man2/clone.2:72 build/C/man3/sched_getcpu.3:45 #: build/C/man2/unshare.2:39 #, no-wrap msgid "Since glibc 2.14:" msgstr "glibc 2.14 以降:" #. type: Plain text #: build/C/man2/clone.2:75 build/C/man3/sched_getcpu.3:48 #: build/C/man2/unshare.2:42 msgid "_GNU_SOURCE" msgstr "_GNU_SOURCE" #. See http://sources.redhat.com/bugzilla/show_bug.cgi?id=4749 #. type: TP #: build/C/man2/clone.2:75 build/C/man3/sched_getcpu.3:48 #: build/C/man2/unshare.2:42 #, no-wrap msgid "Before glibc 2.14:" msgstr "glibc 2.14 より前:" #. type: Plain text #: build/C/man2/clone.2:80 build/C/man3/sched_getcpu.3:52 #: build/C/man2/unshare.2:47 #, no-wrap msgid "" "_BSD_SOURCE || _SVID_SOURCE\n" " /* _GNU_SOURCE also suffices */\n" msgstr "" "_BSD_SOURCE || _SVID_SOURCE\n" " /* _GNU_SOURCE も定義される */\n" #. type: Plain text #: build/C/man2/clone.2:87 msgid "B() creates a new process, in a manner similar to B(2)." msgstr "B() は、 B(2) と似た方法で新しいプロセスを作成する。" #. type: Plain text #: build/C/man2/clone.2:94 msgid "This page describes both the glibc B() wrapper function and the underlying system call on which it is based. The main text describes the wrapper function; the differences for the raw system call are described toward the end of this page." msgstr "このページでは、 glibc の B() ラッパー関数とその裏で呼ばれるシステムコールの両方について説明している。 メインの説明はラッパー関数に関するものである。 素のシステムコールにおける差分はこのページの最後の方で説明する。" #. type: Plain text #: build/C/man2/clone.2:106 msgid "Unlike B(2), B() allows the child process to share parts of its execution context with the calling process, such as the memory space, the table of file descriptors, and the table of signal handlers. (Note that on this manual page, \"calling process\" normally corresponds to \"parent process\". But see the description of B below.)" msgstr "B(2) とは異なり、B() では、子プロセス (child process) と呼び出し元のプロセスとが、メモリ空間、ファイルディスクリプターのテーブル、シグナルハンドラのテーブルなどの 実行コンテキストの一部を共有できる。 (このマニュアルにおける「呼び出し元のプロセス」は、通常は 「親プロセス」と一致する。但し、後述の B の項も参照のこと)" #. type: Plain text #: build/C/man2/clone.2:111 msgid "The main use of B() is to implement threads: multiple threads of control in a program that run concurrently in a shared memory space." msgstr "B() の主要な使用法はスレッド (threads) を実装することである: 一つのプログラムの中の複数のスレッドは共有されたメモリ空間で 同時に実行される。" #. type: Plain text #: build/C/man2/clone.2:131 msgid "When the child process is created with B(), it executes the function I(I). (This differs from B(2), where execution continues in the child from the point of the B(2) call.) The I argument is a pointer to a function that is called by the child process at the beginning of its execution. The I argument is passed to the I function." msgstr "B() で子プロセスが作成された時に、作成された子プロセスは関数 I(I) を実行する。 (この点が B(2) とは異なる。 B(2) の場合、子プロセスは B(2) が呼び出された場所から実行を続ける。) I 引き数は、子プロセスが実行を始める時に子プロセスが呼び出す 関数へのポインターである。 I 引き数はそのまま I 関数へと渡される。" #. type: Plain text #: build/C/man2/clone.2:141 msgid "When the I(I) function application returns, the child process terminates. The integer returned by I is the exit code for the child process. The child process may also terminate explicitly by calling B(2) or after receiving a fatal signal." msgstr "I(I) 関数が終了すると、子プロセスは終了する。 I によって返された整数が子プロセスの終了コードとなる。 子プロセスは、 B(2) を呼んで明示的に終了することもあるし、致命的なシグナルを受信した 場合に終了することもある。" #. type: Plain text #: build/C/man2/clone.2:157 msgid "The I argument specifies the location of the stack used by the child process. Since the child and calling process may share memory, it is not possible for the child process to execute in the same stack as the calling process. The calling process must therefore set up memory space for the child stack and pass a pointer to this space to B(). Stacks grow downward on all processors that run Linux (except the HP PA processors), so I usually points to the topmost address of the memory space set up for the child stack." msgstr "I 引き数は、子プロセスによって使用されるスタックの位置を指定する。 子プロセスと呼び出し元のプロセスはメモリを共有することがあるため、 子プロセスは呼び出し元のプロセスと同じスタックで実行することができない。 このため、呼び出し元のプロセスは子プロセスのスタックのためのメモリ空間を 用意して、この空間へのポインターを B() へ渡さなければならない。 (HP PA プロセッサ以外の) Linux が動作する全てのプロセッサでは、 スタックは下方 (アドレスが小さい方向) へと伸びる。このため、普通は I は子プロセスのスタックのために用意したメモリ空間の一番大きい アドレスを指すようにする。" #. type: Plain text #: build/C/man2/clone.2:173 msgid "The low byte of I contains the number of the I sent to the parent when the child dies. If this signal is specified as anything other than B, then the parent process must specify the B<__WALL> or B<__WCLONE> options when waiting for the child with B(2). If no signal is specified, then the parent process is not signaled when the child terminates." msgstr "I の下位 1 バイトは子プロセスが死んだ場合に親プロセスへと送られる I<終了シグナル (termination signal)> の番号を指定する。このシグナルとして B 以外が指定された場合、親プロセスは、 B(2) で子プロセスを待つ際に、オプションとして B<__WALL> または B<__WCLONE> を指定しなければならない。 どのシグナルも指定されなかった場合、子プロセスが終了した時に親プロセス にシグナルは送られない。" #. type: Plain text #: build/C/man2/clone.2:178 msgid "I may also be bitwise-or'ed with zero or more of the following constants, in order to specify what is shared between the calling process and the child process:" msgstr "I には、以下の定数のうち 0個以上をビット毎の論理和 (bitwise-or) をとったものを指定できる。これらの定数は呼び出し元のプロセスと 子プロセスの間で何を共有するかを指定する:" #. type: TP #: build/C/man2/clone.2:178 #, no-wrap msgid "B (since Linux 2.5.49)" msgstr "B (Linux 2.5.49 以降)" #. type: Plain text #: build/C/man2/clone.2:188 msgid "Erase child thread ID at location I in child memory when the child exits, and do a wakeup on the futex at that address. The address involved may be changed by the B(2) system call. This is used by threading libraries." msgstr "子プロセスが終了したときに子プロセスのメモリ内の I が指す場所にある子プロセスのスレッド ID を消去し、 そのアドレスで futex を wake (起床) させる。 このアドレスは B(2) システムコールで変更することができる。 この機能はスレッドライブラリで使用される。" #. type: TP #: build/C/man2/clone.2:188 #, no-wrap msgid "B (since Linux 2.5.49)" msgstr "B (Linux 2.5.49 以降)" #. type: Plain text #: build/C/man2/clone.2:193 msgid "Store child thread ID at location I in child memory." msgstr "子プロセスのメモリ内の I が指す場所に子プロセスのスレッド ID を格納する。" #. type: TP #: build/C/man2/clone.2:193 #, no-wrap msgid "B (since Linux 2.0)" msgstr "B (Linux 2.0 以降)" #. type: Plain text #: build/C/man2/clone.2:206 msgid "If B is set, the calling process and the child process share the same file descriptor table. Any file descriptor created by the calling process or by the child process is also valid in the other process. Similarly, if one of the processes closes a file descriptor, or changes its associated flags (using the B(2) B operation), the other process is also affected." msgstr "B が設定された場合、呼び出し元のプロセスと子プロセスはファイルディスクリプターの テーブルを共有する。 呼び出し元プロセスとその子プロセスの一方が作成した ファイルディスクリプターは、もう一方においても有効である。 同じように、一方のプロセスがファイルディスクリプターを閉じたり、 (B(2) B 操作を使って) ディスクリプターに関連するフラグを変更したりすると、 もう一方のプロセスにも影響する。" #. type: Plain text #: build/C/man2/clone.2:220 msgid "If B is not set, the child process inherits a copy of all file descriptors opened in the calling process at the time of B(). (The duplicated file descriptors in the child refer to the same open file descriptions (see B(2)) as the corresponding file descriptors in the calling process.) Subsequent operations that open or close file descriptors, or change file descriptor flags, performed by either the calling process or the child process do not affect the other process." msgstr "B が設定されていない場合、子プロセスは、 B() が実行された時点で、呼び出し元のプロセスがオープンしている全ての ファイルディスクリプターのコピーを継承する (子プロセスの複製されたファイルディスクリプターは、 対応する呼び出し元のプロセスのファイルディスクリプターと 同じファイル記述 (B(2) 参照) を参照する)。 これ以降に、呼び出し元のプロセスと子プロセスの一方が ファイルディスクリプターの操作 (ファイルディスクリプターの オープン・クローズや、ファイルディスクリプターフラグの変更) を行っても、もう一方のプロセスには影響を与えない。" #. type: TP #: build/C/man2/clone.2:220 #, no-wrap msgid "B (since Linux 2.0)" msgstr "B (Linux 2.0 以降)" #. type: Plain text #: build/C/man2/clone.2:235 msgid "If B is set, the caller and the child process share the same filesystem information. This includes the root of the filesystem, the current working directory, and the umask. Any call to B(2), B(2), or B(2) performed by the calling process or the child process also affects the other process." msgstr "B が設定された場合、呼び出し元のプロセスと子プロセスが同じファイルシステム 情報を共有する。ファイルシステム情報は、ファイルシステムのルート (root)、 カレントワーキングディレクトリ (current working directory) や umask などである。 呼び出し元のプロセスや子プロセスのどちらか一方によって B(2), B(2), B(2) が呼び出されると、もう一方のプロセスにも影響が及ぶ。" #. type: Plain text #: build/C/man2/clone.2:247 msgid "If B is not set, the child process works on a copy of the filesystem information of the calling process at the time of the B() call. Calls to B(2), B(2), B(2) performed later by one of the processes do not affect the other process." msgstr "B が設定されていない場合、子プロセスは、 B() が実行された時点での、呼び出し元のプロセスのファイルシステム情報のコピーを 使用する。 これ以降は、呼び出し元のプロセスと子プロセスの一方が B(2), B(2), B(2) を呼び出しても、もう一方のプロセスには影響を与えない。" #. type: TP #: build/C/man2/clone.2:247 #, no-wrap msgid "B (since Linux 2.6.25)" msgstr "B (Linux 2.6.25 以降)" #. type: Plain text #: build/C/man2/clone.2:256 msgid "If B is set, then the new process shares an I/O context with the calling process. If this flag is not set, then (as with B(2)) the new process has its own I/O context." msgstr "B が設定された場合、新しいプロセスは呼び出し元のプロセスと I/O コンテキストを共有する。 このフラグが設定されていない場合には、 (B(2) の場合と同様) 新しいプロセスは自分専用の I/O コンテキストを持つ。" #. The following based on text from Jens Axboe #. the anticipatory and CFQ scheduler #. with CFQ and AS. #. type: Plain text #: build/C/man2/clone.2:273 msgid "The I/O context is the I/O scope of the disk scheduler (i.e, what the I/O scheduler uses to model scheduling of a process's I/O). If processes share the same I/O context, they are treated as one by the I/O scheduler. As a consequence, they get to share disk time. For some I/O schedulers, if two processes share an I/O context, they will be allowed to interleave their disk access. If several threads are doing I/O on behalf of the same process (B(3), for instance), they should employ B to get better I/O performance." msgstr "I/O コンテキストは、ディスクスケジュールの I/O スコープである (言い換えると、I/O コンテキストは I/O スケジューラがプロセス I/O の スケジューリングをモデル化するのに使用される)。 複数のプロセスが同じ I/O コンテキストを共有する場合、 これらのプロセスは I/O スケジューラからは一つとして扱われる。 結果として、これらのプロセスはディスクアクセスの時間を共有するようになる。 いくつかの I/O スケジューラでは、 二つのプロセスが I/O コンテキストを共有している場合、 これらのプロセスはディスクアクセスを交互に行うことができる。 同じプロセスの複数のスレッドが I/O を実行している場合 (例えば B(3))、 B を利用することで I/O 性能を良くすることができる。" #. type: Plain text #: build/C/man2/clone.2:277 msgid "If the kernel is not configured with the B option, this flag is a no-op." msgstr "カーネルの設定が B オプション付きでない場合、 このフラグは何の意味も持たない。" #. type: TP #: build/C/man2/clone.2:277 build/C/man2/unshare.2:96 #, no-wrap msgid "B (since Linux 2.6.19)" msgstr "B (Linux 2.6.19 以降)" #. type: Plain text #: build/C/man2/clone.2:287 msgid "If B is set, then create the process in a new IPC namespace. If this flag is not set, then (as with B(2)), the process is created in the same IPC namespace as the calling process. This flag is intended for the implementation of containers." msgstr "B が設定された場合、新しい IPC 名前空間 (namespace) でプロセスを作成する。 このフラグが設定されていない場合、 (B(2) の場合と同様) 呼び出し元のプロセスと同じ IPC 名前空間でプロセスが 作成される。 このフラグは、コンテナの実装での使用を意図して用意されたものである。" #. commit 7eafd7c74c3f2e67c27621b987b28397110d643f #. https://lwn.net/Articles/312232/ #. type: Plain text #: build/C/man2/clone.2:299 msgid "An IPC namespace provides an isolated view of System\\ V IPC objects (see B(7)) and (since Linux 2.6.30) POSIX message queues (see B(7)). The common characteristic of these IPC mechanisms is that IPC objects are identified by mechanisms other than filesystem pathnames." msgstr "IPC 名前空間は、独立の System\\ V IPC オブジェクト空間 (B(7) 参照) を提供する 。 (Linux 2.6.30 以降では) 独立した POSIX メッセージキュー空間 (B(7) 参照) も提供される。 これらの IPC 機構に共通の特徴として、 IPC オブジェクトはファイルシステムのパス名とは違った仕組みで識別されるという点がある。" #. type: Plain text #: build/C/man2/clone.2:303 msgid "Objects created in an IPC namespace are visible to all other processes that are members of that namespace, but are not visible to processes in other IPC namespaces." msgstr "ある IPC 名前空間に作成されたオブジェクトは、 その名前空間のメンバーである他のすべてのプロセスからも見えるが、 違う IPC 名前空間のプロセスからは見えない。" #. type: Plain text #: build/C/man2/clone.2:307 msgid "When an IPC namespace is destroyed (i.e., when the last process that is a member of the namespace terminates), all IPC objects in the namespace are automatically destroyed." msgstr "IPC 名前空間が破棄される時 (すなわち、その名前空間のメンバーの最後のプロセスが終了する時)、 その名前空間の全ての IPC オブジェクトは自動的に破棄される。" #. type: Plain text #: build/C/man2/clone.2:314 msgid "Only a privileged process (B) can employ B. This flag can't be specified in conjunction with B." msgstr "特権プロセス (B) だけが B を使用できる。 このフラグは B と組み合わせて指定することはできない。" #. type: Plain text #: build/C/man2/clone.2:317 msgid "For further information on IPC namespaces, see B(7)." msgstr "IPC 名前空間の詳細は B(7) を参照。" #. type: TP #: build/C/man2/clone.2:317 build/C/man2/unshare.2:113 #, no-wrap msgid "B (since Linux 2.6.24)" msgstr "B (Linux 2.6.24 以降)" #. type: Plain text #: build/C/man2/clone.2:321 msgid "(The implementation of this flag was completed only by about kernel version 2.6.29.)" msgstr "(このフラグの実装は、Linux 2.6.29 あたりまでには完成した。)" #. type: Plain text #: build/C/man2/clone.2:330 msgid "If B is set, then create the process in a new network namespace. If this flag is not set, then (as with B(2)) the process is created in the same network namespace as the calling process. This flag is intended for the implementation of containers." msgstr "B が設定された場合、新しいネットワーク名前空間 (network namaspace) でプロセスを作成する。 このフラグが設定されていない場合、 (B(2) の場合と同様) 呼び出し元のプロセスと同じネットワーク名前空間でプロセスが 作成される。 このフラグは、コンテナの実装での使用を意図して用意されたものである。" #. FIXME . Add pointer to veth(4) page when it is eventually completed #. type: Plain text #: build/C/man2/clone.2:345 msgid "A network namespace provides an isolated view of the networking stack (network device interfaces, IPv4 and IPv6 protocol stacks, IP routing tables, firewall rules, the I and I directory trees, sockets, etc.). A physical network device can live in exactly one network namespace. A virtual network device (\"veth\") pair provides a pipe-like abstraction that can be used to create tunnels between network namespaces, and can be used to create a bridge to a physical network device in another namespace." msgstr "ネットワーク名前空間は、分離されたネットワークスタックを提供するものである (ネットワークスタックとは、 ネットワークデバイスインタフェース、IPv4 や IPv6 プロトコルスタック、 I、 I ディレクトリツリー、ソケットなどである)。 物理ネットワークデバイスが所属できるネットワーク名前空間は一つだけである。 仮想ネットワークデバイス (\"veth\") のペアにより パイプ風の抽象化 (abstraction) が実現されており、 これを使うことで、ネットワーク名前空間間のトンネルを作成したり、 別の名前空間の物理ネットワークデバイスへのブリッジを作成したり することができる。" #. type: Plain text #: build/C/man2/clone.2:352 msgid "When a network namespace is freed (i.e., when the last process in the namespace terminates), its physical network devices are moved back to the initial network namespace (not to the parent of the process). For further information on network namespaces, see B(7)." msgstr "ネットワーク名前空間が解放される時 (すなわち、その名前空間の最後のプロセスが終了する時)、 物理ネットワークデバイスは初期ネットワーク名前空間 (initial network namespace) に戻される (親プロセスのネットワーク名前空間に戻される訳ではない)。 ネットワーク名前空間のさらなる情報は B(7) を参照。" #. type: Plain text #: build/C/man2/clone.2:357 msgid "Only a privileged process (B) can employ B." msgstr "特権プロセス (B) だけが B を使用できる。" #. type: TP #: build/C/man2/clone.2:357 #, no-wrap msgid "B (since Linux 2.4.19)" msgstr "B (Linux 2.4.19 以降)" #. type: Plain text #: build/C/man2/clone.2:367 msgid "If B is set, the cloned child is started in a new mount namespace, initialized with a copy of the namespace of the parent. If B is not set, the child lives in the same mount namespace as the parent." msgstr "B がセットされている場合、 clone で作成された子プロセスは新しいマウント名前空間で開始され、 新しい名前空間は親プロセスの名前空間のコピーで初期化される。 B がセットされていない場合、 子プロセスは親プロセスと同じマウント名前空間となる。" #. type: Plain text #: build/C/man2/clone.2:370 msgid "For further information on mount namespaces, see B(7)." msgstr "マウント名前空間の詳細は B(7) を参照。" #. See https://lwn.net/Articles/543273/ #. type: Plain text #: build/C/man2/clone.2:383 msgid "Only a privileged process (B) can employ B. It is not permitted to specify both B and B in the same B() call." msgstr "特権プロセス (B) のみが B を指定することができる。 一つの B() 呼び出しで、 B と B の両方を指定することはできない。" #. type: TP #: build/C/man2/clone.2:383 #, no-wrap msgid "B (since Linux 2.6.24)" msgstr "B (Linux 2.6.24 以降)" #. This explanation draws a lot of details from #. http://lwn.net/Articles/259217/ #. Authors: Pavel Emelyanov #. and Kir Kolyshkin #. The primary kernel commit is 30e49c263e36341b60b735cbef5ca37912549264 #. Author: Pavel Emelyanov #. type: Plain text #: build/C/man2/clone.2:400 msgid "If B is set, then create the process in a new PID namespace. If this flag is not set, then (as with B(2)) the process is created in the same PID namespace as the calling process. This flag is intended for the implementation of containers." msgstr "B が設定された場合、新しい PID 名前空間でプロセスを作成する。 このフラグが設定されていない場合、 (B(2) の場合と同様) 呼び出し元のプロセスと同じ PID 名前空間で プロセスが作成される。 このフラグは、コンテナの実装での使用を意図して用意されたものである。" #. type: Plain text #: build/C/man2/clone.2:405 msgid "For further information on PID namespaces, see B(7) and B(7)" msgstr "PID 名前空間の詳細は B(7) と B(7) を参照。" #. type: Plain text #: build/C/man2/clone.2:414 msgid "Only a privileged process (B) can employ B. This flag can't be specified in conjunction with B or B." msgstr "特権プロセス (B) だけが B を使用できる。 このフラグは B や B と組み合わせて指定することはできない。" #. type: TP #: build/C/man2/clone.2:414 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/clone.2:424 msgid "(This flag first became meaningful for B() in Linux 2.6.23, the current B() semantics were merged in Linux 3.5, and the final pieces to make the user namespaces completely usable were merged in Linux 3.8.)" msgstr "(このフラグが B() で意味を持つようになったのは Linux 2.6.23 である。 現在の B() の動作が取り込まれたのは Linux 3.5 であり、 ユーザー名前空間が完全に機能するようにする最後の機能が取り込まれたのは Linux 3.8 である。)" #. type: Plain text #: build/C/man2/clone.2:431 msgid "If B is set, then create the process in a new user namespace. If this flag is not set, then (as with B(2)) the process is created in the same user namespace as the calling process." msgstr "B がセットされている場合、新しいユーザー名前空間でプロセスを作成する。 このフラグがセットされていない場合、 (B(2) の場合と同様に) 呼び出し元のプロセスと同じユーザー名前空間でプロセスが作成される。" #. type: Plain text #: build/C/man2/clone.2:436 msgid "For further information on user namespaces, see B(7) and B(7)" msgstr "ユーザー名前空間の詳細は B(7) と B(7) を参照。" #. Before Linux 2.6.29, it appears that only CAP_SYS_ADMIN was needed #. type: Plain text #: build/C/man2/clone.2:447 msgid "Before Linux 3.8, use of B required that the caller have three capabilities: B, B, and B. Starting with Linux 3.8, no privileges are needed to create a user namespace." msgstr "Linux 3.8 より前では、 B を使用するには、 呼び出し元は B, B, B の 3 つのケーパリビティを持っている必要があった。 Linux 3.8 以降では、 ユーザー名前空間を作成するのに特権は必要なくなった。" #. commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71 #. https://lwn.net/Articles/543273/ #. The fix actually went into 3.9 and into 3.8.3. However, user namespaces #. were, for practical purposes, unusable in earlier 3.8.x because of the #. various filesystems that didn't support userns. #. type: Plain text #: build/C/man2/clone.2:461 msgid "This flag can't be specified in conjunction with B or B. For security reasons, B cannot be specified in conjunction with B." msgstr "このフラグは B や B と組み合わせて指定することはできない。 セキュリティ上の理由から、 B は B と組み合わせて指定することはできない。" #. type: Plain text #: build/C/man2/clone.2:464 build/C/man2/unshare.2:209 msgid "For further information on user namespaces, see B(7)." msgstr "ユーザー名前空間の詳細は B(7) を参照。" #. type: TP #: build/C/man2/clone.2:464 build/C/man2/unshare.2:209 #, no-wrap msgid "B (since Linux 2.6.19)" msgstr "B (Linux 2.6.19 以降)" #. type: Plain text #: build/C/man2/clone.2:476 msgid "If B is set, then create the process in a new UTS namespace, whose identifiers are initialized by duplicating the identifiers from the UTS namespace of the calling process. If this flag is not set, then (as with B(2)) the process is created in the same UTS namespace as the calling process. This flag is intended for the implementation of containers." msgstr "B が設定された場合、新しい UTS 名前空間でプロセスを作成する。 新しい UTS 名前空間の識別子の初期値は、呼び出し元のプロセスの UTS 名前空間の識別子を複製したものとなる。 このフラグが設定されていない場合、 (B(2) の場合と同様) 呼び出し元のプロセスと同じ UTS 名前空間で プロセスが作成される。 このフラグは、コンテナの実装での使用を意図して用意されたものである。" #. type: Plain text #: build/C/man2/clone.2:487 msgid "A UTS namespace is the set of identifiers returned by B(2); among these, the domain name and the hostname can be modified by B(2) and B(2), respectively. Changes made to the identifiers in a UTS namespace are visible to all other processes in the same namespace, but are not visible to processes in other UTS namespaces." msgstr "UTS 名前空間は、 B(2) が返す識別子の集合である。 識別子としてはドメイン名とホスト名があり、 それぞれ B(2), B(2) で修正することができる。 ある UTS 名前空間における識別子の変更は同じ名前空間の他のすべての プロセスに見えるが、別の UTS 名前空間のプロセスには見えない。" #. type: Plain text #: build/C/man2/clone.2:492 msgid "Only a privileged process (B) can employ B." msgstr "特権プロセス (B) だけが B を使用できる。" #. type: Plain text #: build/C/man2/clone.2:495 msgid "For further information on UTS namespaces, see B(7)." msgstr "UTS 名前空間の詳細は B(7) を参照。" #. type: TP #: build/C/man2/clone.2:495 #, no-wrap msgid "B (since Linux 2.3.12)" msgstr "B (Linux 2.3.12 以降)" #. type: Plain text #: build/C/man2/clone.2:502 msgid "If B is set, then the parent of the new child (as returned by B(2)) will be the same as that of the calling process." msgstr "B が設定された場合、新しい子供の (B(2) で返される) 親プロセスは呼び出し元のプロセスの親プロセスと同じになる。" #. type: Plain text #: build/C/man2/clone.2:508 msgid "If B is not set, then (as with B(2)) the child's parent is the calling process." msgstr "B が設定されていない場合、 (B(2) と同様に) 呼び出し元のプロセスがその子供の親になる。" #. type: Plain text #: build/C/man2/clone.2:516 msgid "Note that it is the parent process, as returned by B(2), which is signaled when the child terminates, so that if B is set, then the parent of the calling process, rather than the calling process itself, will be signaled." msgstr "子供が終了した時にシグナルが送られるのは B(2) が返す親プロセスである点に注意すること。このため B が設定された場合、呼び出し元のプロセスではなく呼び出し元のプロセスの 親プロセスにシグナルが送られる。" #. type: TP #: build/C/man2/clone.2:516 #, no-wrap msgid "B (since Linux 2.5.49)" msgstr "B (Linux 2.5.49 以降)" #. type: Plain text #: build/C/man2/clone.2:524 msgid "Store child thread ID at location I in parent and child memory. (In Linux 2.5.32-2.5.48 there was a flag B that did this.)" msgstr "親プロセスと子プロセスのメモリ内の I が指す領域に子プロセスのスレッド ID を格納する。 (Linux 2.5.32-2.5.48 では、 同じことをする B というフラグが存在した。)" #. type: TP #: build/C/man2/clone.2:524 #, no-wrap msgid "B (obsolete)" msgstr "B (廃止予定)" #. type: Plain text #: build/C/man2/clone.2:535 msgid "If B is set, the child process is created with the same process ID as the calling process. This is good for hacking the system, but otherwise of not much use. Since 2.3.21 this flag can be specified only by the system boot process (PID 0). It disappeared in Linux 2.5.16." msgstr "B が設定された場合、子プロセスは呼び出し元のプロセスと同じプロセス ID で作成される。これはシステムをハッキングするのには便利だが、 それ以外にはあまり使われない。 Linux 2.3.21 以降では、 システムのブートプロセス (PID 0) だけがこのフラグを指定できる。 Linux 2.5.16 で削除された。" #. type: TP #: build/C/man2/clone.2:535 #, no-wrap msgid "B (since Linux 2.2)" msgstr "B (Linux 2.2 以降)" #. type: Plain text #: build/C/man2/clone.2:542 msgid "If B is specified, and the calling process is being traced, then trace the child also (see B(2))." msgstr "B が指定され、かつ呼び出し元のプロセスが追跡 (trace) されていた場合、子プロセスも 同様に追跡される。 (B(2) を参照のこと)" #. type: TP #: build/C/man2/clone.2:542 #, no-wrap msgid "B (since Linux 2.5.32)" msgstr "B (Linux 2.5.32 以降)" #. type: Plain text #: build/C/man2/clone.2:549 msgid "The I argument is the new TLS (Thread Local Storage) descriptor. (See B(2).)" msgstr "I 引き数は、新しい TLS (Thread Local Storage) ディスクリプターである。 (B(2) を参照のこと)" #. type: TP #: build/C/man2/clone.2:549 #, no-wrap msgid "B (since Linux 2.0)" msgstr "B (Linux 2.0 以降)" #. type: Plain text #: build/C/man2/clone.2:565 msgid "If B is set, the calling process and the child process share the same table of signal handlers. If the calling process or child process calls B(2) to change the behavior associated with a signal, the behavior is changed in the other process as well. However, the calling process and child processes still have distinct signal masks and sets of pending signals. So, one of them may block or unblock some signals using B(2) without affecting the other process." msgstr "B が設定された場合、呼び出し元のプロセスと子プロセスは同じシグナルハン ドラのテーブルを共有する。呼び出し元のプロセスまたは子プロセスのどちらかが B(2) を呼び出してシグナルに対応する動作を変更した場合、 もう一方のプロセスのシグナル動作も変更される。 但し、呼び出し元のプロセスと子プロセスは、 プロセス毎に、シグナルマスク (signal mask) と処理待ちシグナルの集合 を持っている。このため、あるプロセスは、 B(2) を使用して、もう一方のプロセスに影響を与えずに シグナルを禁止 (block) したり許可 (unblock) したりできる。" #. type: Plain text #: build/C/man2/clone.2:576 msgid "If B is not set, the child process inherits a copy of the signal handlers of the calling process at the time B() is called. Calls to B(2) performed later by one of the processes have no effect on the other process." msgstr "B が設定されていない場合、子プロセスは B() が実行された時点での、呼び出し元のプロセスのシグナルハンドラの コピーを継承する。これ以降は、一方のプロセスが B(2) を呼び出しても、もう一方のプロセスには影響を与えない。" #. type: Plain text #: build/C/man2/clone.2:584 msgid "Since Linux 2.6.0-test6, I must also include B if B is specified" msgstr "Linux 2.6.0-test6 以降では、 B を指定する場合、 B も I に含めなければならない。" #. type: TP #: build/C/man2/clone.2:584 #, no-wrap msgid "B (since Linux 2.6.0-test2)" msgstr "B (Linux 2.6.0-test2 以降)" #. type: Plain text #: build/C/man2/clone.2:593 msgid "If B is set, then the child is initially stopped (as though it was sent a B signal), and must be resumed by sending it a B signal." msgstr "B が設定されると、子プロセスは最初 (B シグナルを送られたかのように) 停止した状態となる。 子プロセスを再開させるには B シグナルを送信しなければならない。" #. glibc 2.8 removed this defn from bits/sched.h #. type: Plain text #: build/C/man2/clone.2:601 msgid "This flag was I from Linux 2.6.25 onward, and was I altogether in Linux 2.6.38." msgstr "" "このフラグは Linux 2.6.25 以降ではI<非推奨>であり、\n" "Linux 2.6.38 で完全にI<削除>された。" #. type: TP #: build/C/man2/clone.2:601 #, no-wrap msgid "B (since Linux 2.5.10)" msgstr "B (Linux 2.5.10 以降)" #. type: Plain text #: build/C/man2/clone.2:619 msgid "If B is set, then the child and the calling process share a single list of System V semaphore adjustment (I) values (see B(2)). In this case, the shared list accumulates I values across all processes sharing the list, and semaphore adjustments are performed only when the last process that is sharing the list terminates (or ceases sharing the list using B(2)). If this flag is not set, then the child has a separate I list that is initially empty." msgstr "B がセットされると、子プロセスと呼び出し元プロセスは一つの System\\ V セマフォの調整値 (I) (B(2) 参照) を共有する。 この場合、共有されたリストはこのリストを共有する全プロセスの I 値を積算し、 セマフォ調整はこのリストを共有している最後のプロセスが終了した際 (または B(2) を使ってリストの共有が中止された際) に実行される。 このフラグがセットされていなければ、 子プロセスは独自のセマフォ I リストを持つ (リストの初期値は空である)。" #. type: TP #: build/C/man2/clone.2:619 #, no-wrap msgid "B (since Linux 2.4.0-test8)" msgstr "B (Linux 2.4.0-test8以降)" #. type: Plain text #: build/C/man2/clone.2:628 msgid "If B is set, the child is placed in the same thread group as the calling process. To make the remainder of the discussion of B more readable, the term \"thread\" is used to refer to the processes within a thread group." msgstr "B が設定された場合、子プロセスは呼び出し元のプロセスと同じスレッドグループに 置かれる。 B についての以降の議論を読みやすくするため、 「スレッド」という用語はスレッドグループの中のプロセスを 参照するのに使うこととする。" #. type: Plain text #: build/C/man2/clone.2:636 msgid "Thread groups were a feature added in Linux 2.4 to support the POSIX threads notion of a set of threads that share a single PID. Internally, this shared PID is the so-called thread group identifier (TGID) for the thread group. Since Linux 2.4, calls to B(2) return the TGID of the caller." msgstr "スレッドグループは、 スレッド集合で一つの PID を共有するという POSIX スレッドの概念をサポートするために Linux 2.4 に加えられた機能であった。 内部的には、この共有 PID はいわゆるそのスレッドグループの スレッドグループ識別子 (TGID) である。 Linux 2.4 以降では、 B(2) の呼び出しではそのプロセスのスレッドグループ ID を返す。" #. type: Plain text #: build/C/man2/clone.2:645 msgid "The threads within a group can be distinguished by their (system-wide) unique thread IDs (TID). A new thread's TID is available as the function result returned to the caller of B(), and a thread can obtain its own TID using B(2)." msgstr "あるグループに属するスレッドは (システム全体で) 一意なスレッド ID (TID) で区別できる。新しいスレッドの TID は B() の呼び出し元へ関数の結果として返され、 スレッドは自分自身の TID を B(2) で取得できる。" #. type: Plain text #: build/C/man2/clone.2:655 msgid "When a call is made to B() without specifying B, then the resulting thread is placed in a new thread group whose TGID is the same as the thread's TID. This thread is the I of the new thread group." msgstr "B を指定せずに B() の呼び出しが行われると、 生成されたスレッドはそのスレッドの TID と同じ値の TGID を持つ 新しいスレッドグループに置かれる。このスレッドは 新しいスレッドグループの「リーダー」である。" #. type: Plain text #: build/C/man2/clone.2:677 msgid "A new thread created with B has the same parent process as the caller of B() (i.e., like B), so that calls to B(2) return the same value for all of the threads in a thread group. When a B thread terminates, the thread that created it using B() is not sent a B (or other termination) signal; nor can the status of such a thread be obtained using B(2). (The thread is said to be I.)" msgstr "B を指定して作成された新しいスレッドは、 (B の場合と同様に) B() を呼び出し元と同じ親プロセスを持つ。 そのため、 B(2) を呼ぶと、一つのスレッドグループに属すスレッドは全て同じ値を返す。 B で作られたスレッドが終了した際に、 そのスレッドを B() を使って生成したスレッドには B (もしくは他の終了シグナル) は送信されない。 また、 B(2) を使って終了したスレッドの状態を取得することもできない (そのようなスレッドは I (分離された) といわれる)。" #. type: Plain text #: build/C/man2/clone.2:682 msgid "After all of the threads in a thread group terminate the parent process of the thread group is sent a B (or other termination) signal." msgstr "スレッドグループに属す全てのスレッドが終了した後、 そのスレッドグループの親プロセスに B (もしくは他の終了シグナル) が送られる。" #. type: Plain text #: build/C/man2/clone.2:687 msgid "If any of the threads in a thread group performs an B(2), then all threads other than the thread group leader are terminated, and the new program is executed in the thread group leader." msgstr "スレッドグループに属すいずれかのスレッドが B(2) を実行すると、スレッドグループリーダー以外の全てのスレッドは 終了され、新しいプロセスがそのスレッドグループリーダーの下で 実行される。" #. type: Plain text #: build/C/man2/clone.2:693 msgid "If one of the threads in a thread group creates a child using B(2), then any thread in the group can B(2) for that child." msgstr "スレッドグループに属すスレッドの一つが B(2) を使って子プロセスを作成した場合、 スレッドグループのどのスレッドであっても その子供を B(2) できる。" #. type: Plain text #: build/C/man2/clone.2:706 msgid "Since Linux 2.5.35, I must also include B if B is specified (and note that, since Linux 2.6.0-test6, B also requires B to be included)." msgstr "Linux 2.5.35 以降では、 B を指定する場合、 I に B も含まれていなければならない (Linux 2.6.0-test6 以降では、 B を指定する場合 B も指定する必要がある点に注意すること)。" #. type: Plain text #: build/C/man2/clone.2:711 msgid "Signals may be sent to a thread group as a whole (i.e., a TGID) using B(2), or to a specific thread (i.e., TID) using B(2)." msgstr "B(2) を使ってスレッドグループ全体 (つまり TGID) にシグナルを送ることもできれば、 B(2) を使って特定のスレッド (つまり TID) にシグナルを送ることもできる。" #. type: Plain text #: build/C/man2/clone.2:716 msgid "Signal dispositions and actions are process-wide: if an unhandled signal is delivered to a thread, then it will affect (terminate, stop, continue, be ignored in) all members of the thread group." msgstr "シグナルの配送と処理はプロセス全体に影響する: ハンドラを設定していないシグナルがあるスレッドに配送されると、 そのシグナルはスレッドグループの全メンバーに影響を及ぼす (終了したり、停止したり、動作を継続したり、無視されたりする)。" #. type: Plain text #: build/C/man2/clone.2:729 msgid "Each thread has its own signal mask, as set by B(2), but signals can be pending either: for the whole process (i.e., deliverable to any member of the thread group), when sent with B(2); or for an individual thread, when sent with B(2). A call to B(2) returns a signal set that is the union of the signals pending for the whole process and the signals that are pending for the calling thread." msgstr "各々のスレッドは独自のシグナルマスクを持っており、 B(2) で設定できる。 だが、処理待ちのシグナルには、 B(2) で送信されるプロセス全体に対するもの (つまり、スレッドグループの どのメンバーにも配送できるもの) と、 B(2) で送信される個々のスレッドに対するものがありえる。 B(2) を呼び出すと、プロセス全体に対する処理待ちシグナルと呼び出し元の スレッドに対する処理待ちシグナルを結合したシグナル集合が返される。" #. type: Plain text #: build/C/man2/clone.2:741 msgid "If B(2) is used to send a signal to a thread group, and the thread group has installed a handler for the signal, then the handler will be invoked in exactly one, arbitrarily selected member of the thread group that has not blocked the signal. If multiple threads in a group are waiting to accept the same signal using B(2), the kernel will arbitrarily select one of these threads to receive a signal sent using B(2)." msgstr "B(2) を使ってスレッドグループにシグナルが送られた場合で、 そのスレッドグループがそのシグナルに対するシグナルハンドラが 登録されていたときには、シグナルハンドラはスレッドグループの メンバーのうち、ただ一つのスレッドでだけ起動される。ハンドラが 起動されるスレッドは、そのシグナルを禁止 (block) していない メンバーの中から一つだけが勝手に (arbitrarily) 選ばれる。 スレッドグループに属す複数のスレッドが B(2) を使って同じシグナルを待っている場合、 これらのスレッドの中から一つをカーネルが勝手に選択し、 そのスレッドが B を使って送信されたシグナルを受信する。" #. type: TP #: build/C/man2/clone.2:741 #, no-wrap msgid "B (since Linux 2.5.46)" msgstr "B (Linux 2.5.46 以降)" #. type: Plain text #: build/C/man2/clone.2:748 msgid "If B is specified, then a tracing process cannot force B on this child process." msgstr "B が指定されると、 trace を行っているプロセスは この子プロセスに B を適用することができない。" #. type: TP #: build/C/man2/clone.2:748 #, no-wrap msgid "B (since Linux 2.2)" msgstr "B (Linux 2.2 以降)" #. type: Plain text #: build/C/man2/clone.2:760 msgid "If B is set, the execution of the calling process is suspended until the child releases its virtual memory resources via a call to B(2) or B<_exit>(2) (as with B(2))." msgstr "B が設定された場合、 (B(2) と同様に) 子プロセスが B(2) または B<_exit>(2) によって仮想メモリを解放するまで、呼び出し元のプロセスの実行は停止される。" #. type: Plain text #: build/C/man2/clone.2:766 msgid "If B is not set, then both the calling process and the child are schedulable after the call, and an application should not rely on execution occurring in any particular order." msgstr "B が設定されていない場合、 B() 呼び出し後は、呼び出し元のプロセスと子プロセスの 両方がスケジュール対象となり、アプリケーションはこれらのプロセスの 実行順序に依存しないようにすべきである。" #. type: TP #: build/C/man2/clone.2:766 #, no-wrap msgid "B (since Linux 2.0)" msgstr "B (Linux 2.0 以降)" #. type: Plain text #: build/C/man2/clone.2:779 msgid "If B is set, the calling process and the child process run in the same memory space. In particular, memory writes performed by the calling process or by the child process are also visible in the other process. Moreover, any memory mapping or unmapping performed with B(2) or B(2) by the child or calling process also affects the other process." msgstr "B が設定された場合、呼び出し元のプロセスと子プロセスは同じメモリ空間で 実行される。特に、呼び出し元のプロセスや子プロセスの一方がメモリに 書き込んだ内容はもう一方のプロセスからも見ることができる。さらに、 子プロセスや呼び出し元のプロセスの一方が B(2) や B(2) を使ってメモリをマップしたりアンマップした場合、 もう一方のプロセスにも影響が及ぶ。" #. type: Plain text #: build/C/man2/clone.2:788 msgid "If B is not set, the child process runs in a separate copy of the memory space of the calling process at the time of B(). Memory writes or file mappings/unmappings performed by one of the processes do not affect the other, as with B(2)." msgstr "B が設定されていない場合、子プロセスは B() が実行された時点での、親プロセスのメモリ空間をコピーした 別のメモリ空間で実行される。 一方のプロセスが行ったメモリへの書き込みや ファイルのマップ/アンマップは、 B(2) の場合と同様、もう一方のプロセスには影響しない。" #. type: SS #: build/C/man2/clone.2:788 build/C/man2/sched_setaffinity.2:212 #, no-wrap msgid "C library/kernel ABI differences" msgstr "C ライブラリとカーネル ABI の違い" #. type: Plain text #: build/C/man2/clone.2:804 msgid "The raw B() system call corresponds more closely to B(2) in that execution in the child continues from the point of the call. As such, the I and I arguments of the B() wrapper function are omitted. Furthermore, the argument order changes. The raw system call interface on x86 and many other architectures is roughly:" msgstr "素の B システムコールは、より B(2) に近いかたちになっており、 子プロセスの実行が呼び出しが行われた場所から続けられる。 そのため、 B() ラッパー関数の引き数 I と I は省略される。 また、 引き数の順序も違っている。 x86 と他の多くのアーキテクチャーにおける、 素のシステムコールのインターフェースは、 おおまかには次のようになっている。" #. type: Plain text #: build/C/man2/clone.2:810 #, no-wrap msgid "" "BIB<, void *>IB<,>\n" "B< void *>IB<, void *>IB<,>\n" "B< struct pt_regs *>IB<);>\n" msgstr "" "BIB<, void *>IB<,>\n" "B< void *>IB<, void *>IB<,>\n" "B< struct pt_regs *>IB<);>\n" #. type: Plain text #: build/C/man2/clone.2:821 msgid "Another difference for the raw system call is that the I argument may be zero, in which case copy-on-write semantics ensure that the child gets separate copies of stack pages when either process modifies the stack. In this case, for correct operation, the B option should not be specified." msgstr "生のシステムコールのもう一つの違いは、 I 引き数がゼロでも良いことである。この場合には、どちらかのプロセスが スタックを変更した時に、書き込み時コピー (copy-on-write) 方式により 子プロセスがスタックページの独立したコピーを得られることが保証される。 この場合、正常に動作させるためには、 B オプションを指定してはならない。" #. type: Plain text #: build/C/man2/clone.2:829 msgid "For some architectures, the order of the arguments for the system call differs from that shown above. On the score, microblaze, ARM, ARM 64, PA-RISC, arc, Power PC, xtensa, and MIPS architectures, the order of the fourth and fifth arguments is reversed. On the cris and s390 architectures, the order of the first and second arguments is reversed." msgstr "いくつかのアーキテクチャーでは、システムコールの引き数の順序は上記とは異なっている。 microblaze, ARM, ARM 64, PA-RISC, arc, Power PC, xtensa, MIPS アーキテクチャーでは、 4 番目と 5 番目の引き数の順番が逆である。 cris と s390 アーキテクチャーでは、最初と 2 番目の引き数の順番が逆である。" #. type: SS #: build/C/man2/clone.2:829 #, no-wrap msgid "blackfin, m68k, and sparc" msgstr "blackfin, m68k, sparc" #. type: Plain text #: build/C/man2/clone.2:833 msgid "The argument-passing conventions on blackfin, m68k, and sparc are different from the descriptions above. For details, see the kernel (and glibc) source." msgstr "blackfin, m68k, sparc では引き数渡しの規約が上記の説明とは異なる。 詳細は、カーネル (と glibc) のソースを参照のこと。" #. type: SS #: build/C/man2/clone.2:833 #, no-wrap msgid "ia64" msgstr "ia64" #. type: Plain text #: build/C/man2/clone.2:835 msgid "On ia64, a different interface is used:" msgstr "ia64 では、別のインターフェースが使用される:" #. type: Plain text #: build/C/man2/clone.2:842 #, no-wrap msgid "" "BIB<)(void *), >\n" "B< void *>IB<, size_t >IB<,>\n" "B< int >IB<, void *>IB<, ... >\n" "B< /* pid_t *>IB<, struct user_desc *>IB<, pid_t *>IB< */ );>\n" msgstr "" "BIB<)(void *), >\n" "B< void *>IB<, size_t >IB<,>\n" "B< int >IB<, void *>IB<, ... >\n" "B< /* pid_t *>IB<, struct user_desc *>IB<, pid_t *>IB< */ );>\n" #. type: Plain text #: build/C/man2/clone.2:854 msgid "The prototype shown above is for the glibc wrapper function; the raw system call interface has no I or I argument, and changes the order of the arguments so that I is the first argument, and I is the last argument." msgstr "上記のプロトタイプは glibc ラッパー関数用のものである。 素のシステムコールのインターフェースには引き数 I と I がない。 また、引き数の順序が変わり、 I が最初の引き数で、 I が最後の引き数である。" #. type: Plain text #: build/C/man2/clone.2:865 msgid "B<__clone2>() operates in the same way as B(), except that I points to the lowest address of the child's stack area, and I specifies the size of the stack pointed to by I." msgstr "B<__clone2>() は B() と同じように動作するが、以下の点が異なる: I は子プロセスのスタックエリアの最小のアドレスを指し、 I は I が指し示すスタックエリアの大きさを示す。" #. type: SS #: build/C/man2/clone.2:865 #, no-wrap msgid "Linux 2.4 and earlier" msgstr "Linux 2.4 以前" #. type: Plain text #: build/C/man2/clone.2:873 msgid "In Linux 2.4 and earlier, B() does not take arguments I, I, and I." msgstr "Linux 2.4 以前では、 B() は引き数 I, I, I を取らない。" #. gettid(2) returns current->pid; #. getpid(2) returns current->tgid; #. type: Plain text #: build/C/man2/clone.2:882 msgid "On success, the thread ID of the child process is returned in the caller's thread of execution. On failure, -1 is returned in the caller's context, no child process will be created, and I will be set appropriately." msgstr "成功した場合、呼び出し元の実行スレッドには子プロセスのスレッドID が返される。 失敗した場合、 呼び出し元のコンテキストには -1 が返され、子プロセスは 作成されず、 I が適切に設定される。" #. type: SH #: build/C/man2/clone.2:882 build/C/man2/kcmp.2:170 #: build/C/man2/sched_get_priority_max.2:107 build/C/man3/sched_getcpu.3:65 #: build/C/man2/sched_rr_get_interval.2:80 #: build/C/man2/sched_setaffinity.2:116 build/C/man2/sched_setattr.2:271 #: build/C/man2/sched_setparam.2:96 build/C/man2/sched_setscheduler.2:145 #: build/C/man2/sched_yield.2:48 build/C/man2/setns.2:145 #: build/C/man2/unshare.2:282 #, no-wrap msgid "ERRORS" msgstr "エラー" #. type: TP #: build/C/man2/clone.2:883 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/clone.2:887 msgid "Too many processes are already running; see B(2)." msgstr "すでに実行中のプロセスが多すぎる。 B(2) 参照。" #. type: TP #: build/C/man2/clone.2:887 build/C/man2/clone.2:894 build/C/man2/clone.2:909 #: build/C/man2/clone.2:926 build/C/man2/clone.2:934 build/C/man2/clone.2:946 #: build/C/man2/clone.2:952 build/C/man2/clone.2:962 build/C/man2/clone.2:970 #: build/C/man2/clone.2:978 build/C/man2/kcmp.2:181 #: build/C/man2/sched_get_priority_max.2:108 #: build/C/man2/sched_rr_get_interval.2:84 #: build/C/man2/sched_setaffinity.2:120 build/C/man2/sched_setaffinity.2:128 #: build/C/man2/sched_setattr.2:276 build/C/man2/sched_setattr.2:300 #: build/C/man2/sched_setattr.2:323 build/C/man2/sched_setparam.2:97 #: build/C/man2/sched_setparam.2:104 build/C/man2/sched_setscheduler.2:146 #: build/C/man2/sched_setscheduler.2:153 build/C/man2/sched_setscheduler.2:158 #: build/C/man2/setns.2:150 build/C/man2/setns.2:155 build/C/man2/setns.2:159 #: build/C/man2/setns.2:164 build/C/man2/setns.2:168 build/C/man2/setns.2:175 #: build/C/man2/unshare.2:283 build/C/man2/unshare.2:287 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/clone.2:894 msgid "B was specified, but B was not. (Since Linux 2.6.0-test6.)" msgstr "B が指定されていたが、 B が指定されていなかった。 (Linux 2.6.0-test6 以降)" #. .TP #. .B EINVAL #. Precisely one of #. .B CLONE_DETACHED #. and #. .B CLONE_THREAD #. was specified. #. (Since Linux 2.6.0-test6.) #. type: Plain text #: build/C/man2/clone.2:909 msgid "B was specified, but B was not. (Since Linux 2.5.35.)" msgstr "B が指定されていたが、 B が指定されていなかった。 (Linux 2.5.35 以降)" #. commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71 #. type: Plain text #: build/C/man2/clone.2:918 msgid "Both B and B were specified in I." msgstr "B と B の両方が I に指定された。" #. type: TP #: build/C/man2/clone.2:918 #, no-wrap msgid "B (since Linux 3.9)" msgstr "B (Linux 3.9 以降)" #. type: Plain text #: build/C/man2/clone.2:926 msgid "Both B and B were specified in I." msgstr "B と B の両方が I に指定された。" #. type: Plain text #: build/C/man2/clone.2:934 msgid "Both B and B were specified in I." msgstr "B と B の両方が I に指定された。" #. type: Plain text #: build/C/man2/clone.2:946 msgid "One (or both) of B or B and one (or both) of B or B were specified in I." msgstr "B と B の一方 (もしくは両方) と、 B と B の一方 (もしくは両方) が、 I に指定された。" #. type: Plain text #: build/C/man2/clone.2:952 msgid "Returned by B() when a zero value is specified for I." msgstr "I にゼロを指定した場合に B() が返す。" #. type: Plain text #: build/C/man2/clone.2:962 msgid "B was specified in I, but the kernel was not configured with the B and B options." msgstr "I に B が指定されたが、カーネルでオプション B と B が有効になっていなかった。" #. type: Plain text #: build/C/man2/clone.2:970 msgid "B was specified in I, but the kernel was not configured with the B option." msgstr "I に B が指定されたが、カーネルでオプション B が有効になっていなかった。" #. type: Plain text #: build/C/man2/clone.2:978 msgid "B was specified in I, but the kernel was not configured with the B option." msgstr "I に B が指定されたが、カーネルでオプション B が有効になっていなかった。" #. type: Plain text #: build/C/man2/clone.2:986 msgid "B was specified in I, but the kernel was not configured with the B option." msgstr "I に B が指定されたが、カーネルでオプション B が有効になっていなかった。" #. type: TP #: build/C/man2/clone.2:986 build/C/man2/setns.2:179 #: build/C/man2/unshare.2:296 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/clone.2:991 msgid "Cannot allocate sufficient memory to allocate a task structure for the child, or to copy those parts of the caller's context that need to be copied." msgstr "子プロセスのために確保すべきタスク構造体や、呼び出し元のコンテキストの 一部をコピーするのに必要なメモリを十分に割り当てることができない。" #. type: TP #: build/C/man2/clone.2:991 build/C/man2/clone.2:1000 #: build/C/man2/clone.2:1004 build/C/man2/kcmp.2:185 #: build/C/man2/sched_setaffinity.2:135 build/C/man2/sched_setattr.2:339 #: build/C/man2/sched_setattr.2:342 build/C/man2/sched_setparam.2:109 #: build/C/man2/sched_setscheduler.2:164 build/C/man2/setns.2:182 #: build/C/man2/unshare.2:300 build/C/man2/unshare.2:303 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/clone.2:1000 msgid "B, B, B, B, or B was specified by an unprivileged process (process without B)." msgstr "非特権プロセス (B を持たないプロセス) が B, B, B, B, B を指定した。" #. type: Plain text #: build/C/man2/clone.2:1004 msgid "B was specified by a process other than process 0." msgstr "PID が 0 以外のプロセスによって B が指定された。" #. type: Plain text #: build/C/man2/clone.2:1012 build/C/man2/unshare.2:311 msgid "B was specified in I, but either the effective user ID or the effective group ID of the caller does not have a mapping in the parent namespace (see B(7))." msgstr "B が I に指定されたが、 呼び出し元の実効ユーザー ID もしくは実効グループ ID が親名前空間にマッピングがない (B(7) 参照)。" #. type: TP #: build/C/man2/clone.2:1012 build/C/man2/unshare.2:311 #, no-wrap msgid "B (since Linux 3.9)" msgstr "B (Linux 3.9 以降)" #. commit 3151527ee007b73a0ebd296010f1c0454a919c7d #. FIXME What is the rationale for this restriction? #. type: Plain text #: build/C/man2/clone.2:1022 build/C/man2/unshare.2:321 msgid "B was specified in I and the caller is in a chroot environment (i.e., the caller's root directory does not match the root directory of the mount namespace in which it resides)." msgstr "B が I に指定され、 呼び出し元が chroot された環境にいる (すなわち、呼び出し元の root ディレクトリが呼び出し元が属するマウント名前空間の root ディレクトリに一致しない)。" #. type: TP #: build/C/man2/clone.2:1022 build/C/man2/unshare.2:321 #, no-wrap msgid "B (since Linux 3.11)" msgstr "B (Linux 3.11 以降)" #. type: Plain text #: build/C/man2/clone.2:1031 build/C/man2/unshare.2:330 msgid "B was specified in I, and the call would cause the limit on the number of nested user namespaces to be exceeded. See B(7)." msgstr "B が I に指定されており、 この呼び出しによりネストされたユーザー名前空間数の上限を超えてしまう。 B(7) を参照。" #. type: Plain text #: build/C/man2/clone.2:1038 msgid "There is no entry for B() in libc5. glibc2 provides B() as described in this manual page." msgstr "libc5 には B() はない。glibc2 では B() が提供されており、このマニュアルページに記載の通りである。" #. type: Plain text #: build/C/man2/clone.2:1042 msgid "B() is Linux-specific and should not be used in programs intended to be portable." msgstr "B() は Linux 特有であり、移植を考慮したプログラムでは使用すべき ではない。" #. type: Plain text #: build/C/man2/clone.2:1052 msgid "In the kernel 2.4.x series, B generally does not make the parent of the new thread the same as the parent of the calling process. However, for kernel versions 2.4.7 to 2.4.18 the B flag implied the B flag (as in kernel 2.6)." msgstr "カーネル 2.4.x 系列では、一般的には B フラグを指定しても新しいスレッドの親を 呼び出し元プロセスの親と同じにはしない。 しかし、バージョン 2.4.7〜2.4.18 のカーネルでは、 (カーネル 2.6 と同じように) CLONE_THREAD フラグを指定すると、 暗黙のうちに CLONE_PARENT フラグを指定したことになる。" #. type: Plain text #: build/C/man2/clone.2:1062 msgid "For a while there was B (introduced in 2.5.32): parent wants no child-exit signal. In 2.6.2 the need to give this together with B disappeared. This flag is still defined, but has no effect." msgstr "B というフラグが、2.5.32 で導入されて以来しばらくの間存在した。 このフラグは親プロセスが子プロセス終了のシグナルを必要としないことを 表すものである。 2.6.2 で、 CLONE_DETATCHED を CLONE_THREAD と一緒に指定する必要はなくなった。 このフラグはまだ定義されているが、何の効果もない。" #. type: Plain text #: build/C/man2/clone.2:1067 msgid "On i386, B() should not be called through vsyscall, but directly through I." msgstr "i386 上では、 B() は vsyscall 経由ではなく、直接 I 経由で呼び出すべきである。" #. type: Plain text #: build/C/man2/clone.2:1098 msgid "Versions of the GNU C library that include the NPTL threading library contain a wrapper function for B(2) that performs caching of PIDs. This caching relies on support in the glibc wrapper for B(), but as currently implemented, the cache may not be up to date in some circumstances. In particular, if a signal is delivered to the child immediately after the B() call, then a call to B(2) in a handler for the signal may return the PID of the calling process (\"the parent\"), if the clone wrapper has not yet had a chance to update the PID cache in the child. (This discussion ignores the case where the child was created using B, when B(2) I return the same value in the child and in the process that called B(), since the caller and the child are in the same thread group. The stale-cache problem also does not occur if the I argument includes B.) To get the truth, it may be necessary to use code such as the following:" msgstr "NPTL スレッドライブラリを含んでいる GNU C ライブラリのいくつかのバージョン には、 B(2) のラッパー関数が含まれており、このラッパー関数は PID をキャッシュする。 このキャッシュ処理が正しく動作するためには glibc の B() のラッパー関数での助けが必要だが、現状の実装では、 ある状況下においてキャッシュが最新とならない可能性がある。 特に、 B() の呼び出し直後にシグナルが子プロセスに配送された場合に、 そのシグナルに対するハンドラ内で B(2) を呼び出すと、それまでに clone のラッパー関数が子プロセスの PID キャッシュを 更新する機会が得られていなければ、呼び出し元プロセス (\"親プロセス\") の PID が 返される可能性がある。 (この議論では、子プロセスが B を使って作成された場合のことは無視している。 子プロセスが B を作って作成された場合には、 呼び出し元と子プロセスは同じスレッドグループに属すので、 B(2) は子プロセスと B() を呼び出したプロセスで同じ値を返すのが「正しい」。 キャッシュが最新とならない問題 (stale-cache problem) は、 I に B が含まれている場合にも発生しない。) 本当の値を得るためには、次のようなコードを使う必要があるかもしれない。" #. type: Plain text #: build/C/man2/clone.2:1101 #, no-wrap msgid " #include Esyscall.hE\n" msgstr " #include Esyscall.hE\n" #. type: Plain text #: build/C/man2/clone.2:1103 #, no-wrap msgid " pid_t mypid;\n" msgstr " pid_t mypid;\n" #. type: Plain text #: build/C/man2/clone.2:1105 #, no-wrap msgid " mypid = syscall(SYS_getpid);\n" msgstr " mypid = syscall(SYS_getpid);\n" #. type: Plain text #: build/C/man2/clone.2:1119 msgid "The following program demonstrates the use of B() to create a child process that executes in a separate UTS namespace. The child changes the hostname in its UTS namespace. Both parent and child then display the system hostname, making it possible to see that the hostname differs in the UTS namespaces of the parent and child. For an example of the use of this program, see B(2)." msgstr "以下のプログラムは、 別の UTS 名前空間で動作する子プロセスを B() を使って作成する例である。 子プロセスは、自分の UTS 名前空間においてホスト名を変更する。 それから、親プロセスと子プロセスの両方でシステムのホスト名を表示し、 親プロセスと子プロセスの UTS 名前空間でホスト名が異なることを確認する。 このプログラムの使用方法については B(2) を参照。" #. type: SS #: build/C/man2/clone.2:1119 build/C/man2/setns.2:255 #: build/C/man2/unshare.2:396 #, no-wrap msgid "Program source" msgstr "プログラムのソース" #. type: Plain text #: build/C/man2/clone.2:1129 #, no-wrap msgid "" "#define _GNU_SOURCE\n" "#include Esys/wait.hE\n" "#include Esys/utsname.hE\n" "#include Esched.hE\n" "#include Estring.hE\n" "#include Estdio.hE\n" "#include Estdlib.hE\n" "#include Eunistd.hE\n" msgstr "" "#define _GNU_SOURCE\n" "#include Esys/wait.hE\n" "#include Esys/utsname.hE\n" "#include Esched.hE\n" "#include Estring.hE\n" "#include Estdio.hE\n" "#include Estdlib.hE\n" "#include Eunistd.hE\n" #. type: Plain text #: build/C/man2/clone.2:1132 build/C/man2/setns.2:266 #: build/C/man2/unshare.2:415 #, no-wrap msgid "" "#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \\e\n" " } while (0)\n" msgstr "" "#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \\e\n" " } while (0)\n" #. type: Plain text #: build/C/man2/clone.2:1137 #, no-wrap msgid "" "static int /* Start function for cloned child */\n" "childFunc(void *arg)\n" "{\n" " struct utsname uts;\n" msgstr "" "static int /* clone された子プロセスの開始関数 */\n" "childFunc(void *arg)\n" "{\n" " struct utsname uts;\n" #. type: Plain text #: build/C/man2/clone.2:1139 #, no-wrap msgid " /* Change hostname in UTS namespace of child */\n" msgstr " /* 子プロセスの UTS 名前空間でホスト名を変更する */\n" #. type: Plain text #: build/C/man2/clone.2:1142 #, no-wrap msgid "" " if (sethostname(arg, strlen(arg)) == -1)\n" " errExit(\"sethostname\");\n" msgstr "" " if (sethostname(arg, strlen(arg)) == -1)\n" " errExit(\"sethostname\");\n" #. type: Plain text #: build/C/man2/clone.2:1144 #, no-wrap msgid " /* Retrieve and display hostname */\n" msgstr " /* ホスト名を取得し表示する */\n" #. type: Plain text #: build/C/man2/clone.2:1148 #, no-wrap msgid "" " if (uname(&uts) == -1)\n" " errExit(\"uname\");\n" " printf(\"uts.nodename in child: %s\\en\", uts.nodename);\n" msgstr "" " if (uname(&uts) == -1)\n" " errExit(\"uname\");\n" " printf(\"uts.nodename in child: %s\\en\", uts.nodename);\n" #. type: Plain text #: build/C/man2/clone.2:1152 #, no-wrap msgid "" " /* Keep the namespace open for a while, by sleeping.\n" " This allows some experimentation--for example, another\n" " process might join the namespace. */\n" msgstr "" " /* sleep を使ってしばらく名前空間をオープンされたままにする。\n" " これにより実験を行うことができる -- 例えば、\n" " 別のプロセスがこの名前空間に参加するなど。 */\n" #. type: Plain text #: build/C/man2/clone.2:1154 #, no-wrap msgid " sleep(200);\n" msgstr " sleep(200);\n" #. type: Plain text #: build/C/man2/clone.2:1157 #, no-wrap msgid "" " return 0; /* Child terminates now */\n" "}\n" msgstr "" " return 0; /* 子プロセスを終了する */\n" "}\n" #. type: Plain text #: build/C/man2/clone.2:1159 #, no-wrap msgid "#define STACK_SIZE (1024 * 1024) /* Stack size for cloned child */\n" msgstr "#define STACK_SIZE (1024 * 1024) /* clone される子プロセスのスタックサイズ */\n" #. type: Plain text #: build/C/man2/clone.2:1167 #, no-wrap msgid "" "int\n" "main(int argc, char *argv[])\n" "{\n" " char *stack; /* Start of stack buffer */\n" " char *stackTop; /* End of stack buffer */\n" " pid_t pid;\n" " struct utsname uts;\n" msgstr "" "int\n" "main(int argc, char *argv[])\n" "{\n" " char *stack; /* スタックバッファーの先頭 */\n" " char *stackTop; /* スタックバッファーの末尾 */\n" " pid_t pid;\n" " struct utsname uts;\n" #. type: Plain text #: build/C/man2/clone.2:1172 #, no-wrap msgid "" " if (argc E 2) {\n" " fprintf(stderr, \"Usage: %s Echild-hostnameE\\en\", argv[0]);\n" " exit(EXIT_SUCCESS);\n" " }\n" msgstr "" " if (argc E 2) {\n" " fprintf(stderr, \"Usage: %s Echild-hostnameE\\en\", argv[0]);\n" " exit(EXIT_SUCCESS);\n" " }\n" #. type: Plain text #: build/C/man2/clone.2:1174 #, no-wrap msgid " /* Allocate stack for child */\n" msgstr " /* 子プロセス用のスタックを割り当てる */\n" #. type: Plain text #: build/C/man2/clone.2:1179 #, no-wrap msgid "" " stack = malloc(STACK_SIZE);\n" " if (stack == NULL)\n" " errExit(\"malloc\");\n" " stackTop = stack + STACK_SIZE; /* Assume stack grows downward */\n" msgstr "" " stack = malloc(STACK_SIZE);\n" " if (stack == NULL)\n" " errExit(\"malloc\");\n" " stackTop = stack + STACK_SIZE; /* スタックは下方向に伸びるものとする */\n" #. type: Plain text #: build/C/man2/clone.2:1182 #, no-wrap msgid "" " /* Create child that has its own UTS namespace;\n" " child commences execution in childFunc() */\n" msgstr "" " /* 自分専用の UTS 名前空間を持つ子プロセスを作成する;\n" " 子プロセスは childFunc() の実行を開始する */\n" #. type: Plain text #: build/C/man2/clone.2:1187 #, no-wrap msgid "" " pid = clone(childFunc, stackTop, CLONE_NEWUTS | SIGCHLD, argv[1]);\n" " if (pid == -1)\n" " errExit(\"clone\");\n" " printf(\"clone() returned %ld\\en\", (long) pid);\n" msgstr "" " pid = clone(childFunc, stackTop, CLONE_NEWUTS | SIGCHLD, argv[1]);\n" " if (pid == -1)\n" " errExit(\"clone\");\n" " printf(\"clone() returned %ld\\en\", (long) pid);\n" #. type: Plain text #: build/C/man2/clone.2:1189 #, no-wrap msgid " /* Parent falls through to here */\n" msgstr " /* 親プロセスの実行はここに来る */\n" #. type: Plain text #: build/C/man2/clone.2:1191 #, no-wrap msgid " sleep(1); /* Give child time to change its hostname */\n" msgstr " sleep(1); /* 子プロセスがホスト名を変更する時間を与える */\n" #. type: Plain text #: build/C/man2/clone.2:1194 #, no-wrap msgid "" " /* Display hostname in parent\\(aqs UTS namespace. This will be\n" " different from hostname in child\\(aqs UTS namespace. */\n" msgstr "" " /* 親プロセスの UTS 名前空間でのホスト名を表示する;\n" " これは子プロセスの UTS 名前空間でのホスト名とは異なる */\n" #. type: Plain text #: build/C/man2/clone.2:1198 #, no-wrap msgid "" " if (uname(&uts) == -1)\n" " errExit(\"uname\");\n" " printf(\"uts.nodename in parent: %s\\en\", uts.nodename);\n" msgstr "" " if (uname(&uts) == -1)\n" " errExit(\"uname\");\n" " printf(\"uts.nodename in parent: %s\\en\", uts.nodename);\n" #. type: Plain text #: build/C/man2/clone.2:1202 #, no-wrap msgid "" " if (waitpid(pid, NULL, 0) == -1) /* Wait for child */\n" " errExit(\"waitpid\");\n" " printf(\"child has terminated\\en\");\n" msgstr "" " if (waitpid(pid, NULL, 0) == -1) /* 子プロセスを待つ */\n" " errExit(\"waitpid\");\n" " printf(\"child has terminated\\en\");\n" #. type: Plain text #: build/C/man2/clone.2:1205 #, no-wrap msgid "" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" " exit(EXIT_SUCCESS);\n" "}\n" #. type: Plain text #: build/C/man2/clone.2:1221 msgid "B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(7), B(7), B(7)" msgstr "B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(7), B(7), B(7)" #. type: TH #: build/C/man2/kcmp.2:28 #, no-wrap msgid "KCMP" msgstr "KCMP" #. type: TH #: build/C/man2/kcmp.2:28 #, no-wrap msgid "2013-12-08" msgstr "2013-12-08" #. type: Plain text #: build/C/man2/kcmp.2:31 msgid "kcmp - compare two processes to determine if they share a kernel resource" msgstr "kcmp - 二つのプロセスが同じカーネルリソースを共有しているかを比較する" #. type: Plain text #: build/C/man2/kcmp.2:34 #, no-wrap msgid "B<#include Elinux/kcmp.hE>\n" msgstr "B<#include Elinux/kcmp.hE>\n" #. type: Plain text #: build/C/man2/kcmp.2:37 #, no-wrap msgid "" "BIB<, pid_t >IB<, int >IB<,>\n" "B< unsigned long >IB<, unsigned long >IB<);>\n" msgstr "" "BIB<, pid_t >IB<, int >IB<,>\n" "B< unsigned long >IB<, unsigned long >IB<);>\n" #. type: Plain text #: build/C/man2/kcmp.2:41 msgid "I: There is no glibc wrapper for this system call; see NOTES." msgstr "I<注>: このシステムコールには glibc のラッパー関数は存在しない。「注意」の節を参照。" #. type: Plain text #: build/C/man2/kcmp.2:50 msgid "The B() system call can be used to check whether the two processes identified by I and I share a kernel resource such as virtual memory, file descriptors, and so on." msgstr "システムコール B() を使うと、 ID が I と I の二つのプロセスが、 仮想メモリやファイルディスクリプターなどの、 同じカーネルリソースを共有しているかどうかを検査できる。" #. type: Plain text #: build/C/man2/kcmp.2:55 msgid "The I argument specifies which resource is to be compared in the two processes. It has one of the following values:" msgstr "I 引き数は 2 つのプロセス間でどのリソースを比較するかを指定する。 以下のいずれかの値を指定する。" #. type: TP #: build/C/man2/kcmp.2:55 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/kcmp.2:67 msgid "Check whether a file descriptor I in the process I refers to the same open file description (see B(2)) as file descriptor I in the process I." msgstr "プロセス I のファイルディスクリプター I が、 プロセス I のファイルディスクリプター I と同じオープンファイル記述 (open file description) を参照しているかを検査する。" #. type: TP #: build/C/man2/kcmp.2:67 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/kcmp.2:75 msgid "Check whether the process share the same set of open file descriptors. The arguments I and I are ignored." msgstr "二つのプロセスが同じオープンファイル記述の集合を共有しているかを検査する。 引き数 I と I は無視される。" #. type: TP #: build/C/man2/kcmp.2:75 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/kcmp.2:84 msgid "Check whether the processes share the same filesystem information (i.e., file mode creation mask, working directory, and filesystem root). The arguments I and I are ignored." msgstr "二つのプロセスが同じファイルシステム情報 (すなわち、ファイルのモード作成マスク、作業ディレクトリ、ファイルシステムのルート) を共有しているかを検査する。 引き数 I と I は無視される。" #. type: TP #: build/C/man2/kcmp.2:84 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/kcmp.2:92 msgid "Check whether the processes share I/O context. The arguments I and I are ignored." msgstr "二つのプロセスが I/O コンテキストを共有しているかを検査する。 引き数 I と I は無視される。" #. type: TP #: build/C/man2/kcmp.2:92 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/kcmp.2:100 msgid "Check whether the processes share the same table of signal dispositions. The arguments I and I are ignored." msgstr "二つのプロセスがシグナル配送 (disposition) テーブルを共有しているかを検査する。 引き数 I と I は無視される。" #. type: TP #: build/C/man2/kcmp.2:100 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/kcmp.2:109 msgid "Check whether the processes share the same list of System\\ V semaphore undo operations. The arguments I and I are ignored." msgstr "二つのプロセスが同じ System\\ V セマフォ undo 操作のリストを共有しているかを検査する。 引き数 I と I は無視される。" #. type: TP #: build/C/man2/kcmp.2:109 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/kcmp.2:117 msgid "Check whether the processes share the same address space. The arguments I and I are ignored." msgstr "二つのプロセスが同じアドレス空間を共有しているかを検査する。 引き数 I と I は無視される。" #. type: Plain text #: build/C/man2/kcmp.2:127 msgid "Note the B() is not protected against false positives which may occur if tasks are running. One should stop tasks by sending B (see B(7)) prior to inspection with this system call to obtain meaningful results." msgstr "B() には、タスクが実行されている場合に起こり得る誤判定 (false positive) に関する保護はない。 ということは、 意味のある結果を得るためには、 このシステムコールで検査を行う前に、 B を送信してタスクを停止すべきだということだ (B(7) 参照)。" #. type: Plain text #: build/C/man2/kcmp.2:133 msgid "The return value of a successful call to B() is simply the result of arithmetic comparison of kernel pointers (when the kernel compares resources, it uses their memory addresses)." msgstr "B() の呼び出しが成功した場合の返り値は、単にカーネルポインターを数値で比較した結果となる (カーネルはリソースを比較する際、リソースのメモリアドレスを使用する)。" #. type: Plain text #: build/C/man2/kcmp.2:141 msgid "The easiest way to explain is to consider an example. Suppose that I and I are the addresses of appropriate resources, then the return value is one of the following:" msgstr "これを説明するには、例を見るのが一番簡単である。 I と I を適切なリソースのアドレスとすると、 返り値は以下のいずれか一つとなる。" #. type: IP #: build/C/man2/kcmp.2:142 #, no-wrap msgid "0" msgstr "0" #. type: Plain text #: build/C/man2/kcmp.2:147 msgid "I is equal to I; in other words, the two processes share the resource." msgstr "I は I と等しい。言い換えれば、二つのプロセスはそのリソースを共有している。" #. type: IP #: build/C/man2/kcmp.2:147 #, no-wrap msgid "1" msgstr "1" #. type: Plain text #: build/C/man2/kcmp.2:151 msgid "I is less than I." msgstr "I は I より小さい。" #. type: IP #: build/C/man2/kcmp.2:151 #, no-wrap msgid "2" msgstr "2" #. type: Plain text #: build/C/man2/kcmp.2:155 msgid "I is greater than I." msgstr "I は I より大きい。" #. type: IP #: build/C/man2/kcmp.2:155 #, no-wrap msgid "3" msgstr "3" #. type: Plain text #: build/C/man2/kcmp.2:160 msgid "I is not equal to I, but ordering information is unavailable." msgstr "I は I と等しくないが、順序情報がない。" #. type: Plain text #: build/C/man2/kcmp.2:165 msgid "On error, -1 is returned, and I is set appropriately." msgstr "エラーの場合は -1 が返され、 I が適切に設定される。" #. type: Plain text #: build/C/man2/kcmp.2:170 msgid "B() was designed to return values suitable for sorting. This is particularly handy if one needs to compare a large number of file descriptors." msgstr "B() は、ソートに適した値を返すように設計された。 大量のファイルディスクリプターを比較する必要がある場合に、特に役に立つ。" #. type: TP #: build/C/man2/kcmp.2:171 build/C/man2/setns.2:146 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/kcmp.2:181 msgid "I is B and I or I is not an open file descriptor." msgstr "I が B で、かつ I か I がオープンファイル記述でない。" #. type: Plain text #: build/C/man2/kcmp.2:185 msgid "I is invalid." msgstr "I が無効である。" #. type: Plain text #: build/C/man2/kcmp.2:191 msgid "Insufficient permission to inspect process resources. The B capability is required to inspect processes that you do not own." msgstr "プロセスのリソースを検査するのに十分な許可がない。 自分が所有していないプロセスを検査するためには B ケーパビリティが必要である。" #. type: TP #: build/C/man2/kcmp.2:191 build/C/man2/sched_rr_get_interval.2:90 #: build/C/man2/sched_setaffinity.2:145 build/C/man2/sched_setattr.2:284 #: build/C/man2/sched_setparam.2:116 build/C/man2/sched_setscheduler.2:167 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/kcmp.2:198 msgid "Process I or I does not exist." msgstr "プロセス I か I が存在しない。" #. type: Plain text #: build/C/man2/kcmp.2:202 msgid "The B() system call first appeared in Linux 3.5." msgstr "B() システムコールは Linux 3.5 で初めて登場した。" #. type: Plain text #: build/C/man2/kcmp.2:205 msgid "B() is Linux-specific and should not be used in programs intended to be portable." msgstr "B() は Linux 特有であり、 移植を考慮したプログラムでは使用すべきではない。" #. type: Plain text #: build/C/man2/kcmp.2:208 msgid "Glibc does not provide a wrapper for this system call; call it using B(2)." msgstr "glibc はこのシステムコールに対するラッパー関数を提供していない。 B(2) を使って呼び出すこと。" #. type: Plain text #: build/C/man2/kcmp.2:217 msgid "This system call is available only if the kernel was configured with B. The main use of the system call is for the checkpoint/restore in user space (CRIU) feature. The alternative to this system call would have been to expose suitable process information via the B(5) filesystem; this was deemed to be unsuitable for security reasons." msgstr "このシステムコールが利用できるのは、 カーネルの B オプションが有効になっている場合だけである。 このシステムコールの主な用途は、 ユーザー空間でのチェックポイント/リストア (checkpoint/restore in user space; CRIU) 機能である。 このシステムコールを使わないとすると、 B(5) ファイルシステム経由で必要なプロセス情報を公開することになるが、 これはセキュリティ上の理由から不適切とみなされた。" #. type: Plain text #: build/C/man2/kcmp.2:222 msgid "See B(2) for some background information on the shared resources referred to on this page." msgstr "このページで参照されている共有リソースに関する背景についての情報は B(2) を参照のこと。" #. type: Plain text #: build/C/man2/kcmp.2:225 msgid "B(2), B(2)" msgstr "B(2), B(2)" #. type: TH #: build/C/man2/sched_get_priority_max.2:29 #, no-wrap msgid "SCHED_GET_PRIORITY_MAX" msgstr "SCHED_GET_PRIORITY_MAX" #. type: TH #: build/C/man2/sched_get_priority_max.2:29 #, no-wrap msgid "2014-05-12" msgstr "2014-05-12" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:32 msgid "sched_get_priority_max, sched_get_priority_min - get static priority range" msgstr "sched_get_priority_max, sched_get_priority_min - 静的プライオリティの範囲を取得する" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:34 #: build/C/man2/sched_rr_get_interval.2:34 build/C/man2/sched_yield.2:34 msgid "B<#include Esched.hE>" msgstr "B<#include Esched.hE>" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:36 msgid "BIB<);>" msgstr "BIB<);>" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:38 msgid "BIB<);>" msgstr "BIB<);>" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:59 msgid "B() returns the maximum priority value that can be used with the scheduling algorithm identified by I. B() returns the minimum priority value that can be used with the scheduling algorithm identified by I. Supported I values are B, B, B, B, B, and B. Further details about these policies can be found in B(7)." msgstr "B() はI によって指定されたスケジューリングのアルゴリズムで 使用されるプライオリティの最大値を返す。 B() はI によって指定されたスケジューリングのアルゴリズムで 使用されるプライオリティの最小値を返す。 サポートされる I の値は B、 B、 B、 B, B, B である。これらのスケジューリング方針に関する詳細は B(7) に書かれている。" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:68 msgid "Processes with numerically higher priority values are scheduled before processes with numerically lower priority values. Thus, the value returned by B() will be greater than the value returned by B()." msgstr "数値的に大きなプライオリティ値を持つプロセスは小さな プライオリティ値を持つプロセスより前にスケジュールされる。 このため B() が返す値は B() が返す値よりも大きい。" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:76 msgid "Linux allows the static priority range 1 to 99 for the B and B policies, and the priority 0 for the remaining policies. Scheduling priority ranges for the various policies are not alterable." msgstr "Linux では、 ポリシー B と B では 1 から 99 の範囲の静的プライオリティーを持ち、それ以外のポリシーでは プライオリティとして 0 を持つ。 それぞれの方針のスケジューリングプライオリティの範囲は 変更することができない。" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:88 msgid "The range of scheduling priorities may vary on other POSIX systems, thus it is a good idea for portable applications to use a virtual priority range and map it to the interval given by B() and B(). POSIX.1-2001 requires a spread of at least 32 between the maximum and the minimum values for B and B." msgstr "スケジューリングプライオリティの範囲は他の POSIX システムと 異なっているかもしれない。それで、移植性(portable)のある アプリケーションでは仮想的な範囲を用い B() と B() で与えられた間隔にマップして使用することはいい考えである。 POSIX.1-2001 では B と B における 最大値と最小値の間隔を少なくとも 32 にすることを要求している。" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:97 msgid "POSIX systems on which B() and B() are available define B<_POSIX_PRIORITY_SCHEDULING> in Iunistd.hE>." msgstr "POSIX システムでは B() と B() は Iunistd.hE> に B<_POSIX_PRIORITY_SCHEDULING> が定義されている場合にのみ使用可能である。" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:107 msgid "On success, B() and B() return the maximum/minimum priority value for the named scheduling policy. On error, -1 is returned, and I is set appropriately." msgstr "成功した場合は B() と B() は指定されたスケジューリング方針のプライオリティの最大値/最小値を返す。 エラーの場合は -1 が返され、 I が適切に設定される。" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:113 msgid "The argument I does not identify a defined scheduling policy." msgstr "引き数 I が定義されているスケジューリング方針と一致しない。" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:115 #: build/C/man2/sched_rr_get_interval.2:96 build/C/man2/sched_setparam.2:121 #: build/C/man2/sched_yield.2:54 msgid "POSIX.1-2001." msgstr "POSIX.1-2001." #. type: Plain text #: build/C/man2/sched_get_priority_max.2:125 msgid "B(2), B(2), B(2), B(2), B(2), B(2), B(7)" msgstr "B(2), B(2), B(2), B(2), B(2), B(2), B(7)" #. type: TH #: build/C/man3/sched_getcpu.3:26 #, no-wrap msgid "SCHED_GETCPU" msgstr "SCHED_GETCPU" #. type: TH #: build/C/man3/sched_getcpu.3:26 #, no-wrap msgid "2014-05-10" msgstr "2014-05-10" #. type: Plain text #: build/C/man3/sched_getcpu.3:29 msgid "sched_getcpu - determine CPU on which the calling thread is running" msgstr "sched_getcpu - 呼び出したスレッドが実行されている CPU を知る" #. type: Plain text #: build/C/man3/sched_getcpu.3:34 #, no-wrap msgid "B\n" msgstr "B\n" #. type: Plain text #: build/C/man3/sched_getcpu.3:39 build/C/man2/unshare.2:33 msgid "Feature Test Macro Requirements for glibc (see B(7)):" msgstr "glibc 向けの機能検査マクロの要件 (B(7) 参照):" #. type: Plain text #: build/C/man3/sched_getcpu.3:42 msgid "B():" msgstr "B():" #. type: Plain text #: build/C/man3/sched_getcpu.3:58 msgid "B() returns the number of the CPU on which the calling thread is currently executing." msgstr "B() は、呼び出したスレッドが現在実行されている CPU の番号を返す。" #. type: Plain text #: build/C/man3/sched_getcpu.3:65 msgid "On success, B() returns a nonnegative CPU number. On error, -1 is returned and I is set to indicate the error." msgstr "成功すると、 B() は非負の CPU 番号を返す。 エラーの場合、-1 を返し、 I にエラーを示す値を設定する。" #. type: TP #: build/C/man3/sched_getcpu.3:66 build/C/man2/sched_rr_get_interval.2:87 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man3/sched_getcpu.3:70 msgid "This kernel does not implement B(2)." msgstr "このカーネルでは B(2) が実装されていない。" #. type: Plain text #: build/C/man3/sched_getcpu.3:72 msgid "This function is available since glibc 2.6." msgstr "この関数は glibc 2.6 以降で利用可能である。" #. type: SH #: build/C/man3/sched_getcpu.3:72 #, no-wrap msgid "ATTRIBUTES" msgstr "属性" #. type: SS #: build/C/man3/sched_getcpu.3:73 #, no-wrap msgid "Multithreading (see pthreads(7))" msgstr "マルチスレッディング (pthreads(7) 参照)" #. type: Plain text #: build/C/man3/sched_getcpu.3:77 msgid "The B() function is thread-safe." msgstr "B() 関数はスレッドセーフである。" #. type: Plain text #: build/C/man3/sched_getcpu.3:80 msgid "B() is glibc-specific." msgstr "B() は glibc 固有である。" #. type: Plain text #: build/C/man3/sched_getcpu.3:82 msgid "The call" msgstr "呼び出し" #. type: Plain text #: build/C/man3/sched_getcpu.3:86 #, no-wrap msgid "cpu = sched_getcpu();\n" msgstr "cpu = sched_getcpu();\n" #. type: Plain text #: build/C/man3/sched_getcpu.3:92 msgid "is equivalent to the following B(2) call:" msgstr "は、以下の B(2) 呼び出しと等価である。" #. type: Plain text #: build/C/man3/sched_getcpu.3:98 #, no-wrap msgid "" "int c, s;\n" "s = getcpu(&c, NULL, NULL);\n" "cpu = (s == -1) ? s : c;\n" msgstr "" "int c, s;\n" "s = getcpu(&c, NULL, NULL);\n" "cpu = (s == -1) ? s : c;\n" #. type: Plain text #: build/C/man3/sched_getcpu.3:103 msgid "B(2), B(7)" msgstr "B(2), B(7)" #. type: TH #: build/C/man2/sched_rr_get_interval.2:29 #, no-wrap msgid "SCHED_RR_GET_INTERVAL" msgstr "SCHED_RR_GET_INTERVAL" #. type: TH #: build/C/man2/sched_rr_get_interval.2:29 build/C/man2/sched_yield.2:29 #, no-wrap msgid "2014-04-28" msgstr "2014-04-28" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:32 msgid "sched_rr_get_interval - get the SCHED_RR interval for the named process" msgstr "sched_rr_get_interval - 指定されたプロセスの SCHED_RR 間隔を取得する" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:36 msgid "BIB<, struct timespec * >IB<);>" msgstr "BIB<, struct timespec *>IB<);>" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:47 msgid "B() writes into the I structure pointed to by I the round-robin time quantum for the process identified by I. The specified process should be running under the B scheduling policy." msgstr "" "B() は I で指定された I 構造体に\n" "I で指定されたプロセスのラウンドロビン時間量 (round robin time\n" "quantum) を書き込む。指定されたプロセスは B スケジューリング\n" "ポリシーで動作しているはずである。" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:51 msgid "The I structure has the following form:" msgstr "I 構造体は以下の通りである:" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:58 #, no-wrap msgid "" "struct timespec {\n" " time_t tv_sec; /* seconds */\n" " long tv_nsec; /* nanoseconds */\n" "};\n" msgstr "" "struct timespec {\n" " time_t tv_sec; /* seconds */\n" " long tv_nsec; /* nanoseconds */\n" "};\n" # #. FIXME . On Linux, sched_rr_get_interval() #. returns the timeslice for SCHED_OTHER processes -- this timeslice #. is influenced by the nice value. #. For SCHED_FIFO processes, this always returns 0. #. The round-robin time quantum value is not alterable under Linux #. 1.3.81. #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:73 msgid "If I is zero, the time quantum for the calling process is written into I<*tp>." msgstr "" "I が 0 の場合、呼び出したプロセスの時間量 (time quantum) が\n" "I<*tp> に書き込まれる。" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:80 msgid "On success, B() returns 0. On error, -1 is returned, and I is set appropriately." msgstr "成功した場合は B() は 0 を返す。 エラーの場合は -1 が返され、 I が適切に設定される。" #. type: TP #: build/C/man2/sched_rr_get_interval.2:81 #: build/C/man2/sched_setaffinity.2:117 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:84 msgid "Problem with copying information to user space." msgstr "情報をユーザー空間にコピーする時に問題が起きた。" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:87 msgid "Invalid pid." msgstr "PID が不正である。" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:90 msgid "The system call is not yet implemented (only on rather old kernels)." msgstr "システムコールがまだ実装されていない (かなり古いカーネルにおいてのみ)。" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:94 msgid "Could not find a process with the ID I." msgstr "プロセス ID が I のプロセスが見つからなかった。" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:103 msgid "POSIX systems on which B() is available define B<_POSIX_PRIORITY_SCHEDULING> in Iunistd.hE>." msgstr "" "POSIX システムで B() は Iunistd.hE> に\n" "B<_POSIX_PRIORITY_SCHEDULING> が定義されている場合にのみ使用可能である。" #. type: SS #: build/C/man2/sched_rr_get_interval.2:103 #, no-wrap msgid "Linux notes" msgstr "Linux での注意" #. commit a4ec24b48ddef1e93f7578be53270f0b95ad666c #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:117 msgid "POSIX does not specify any mechanism for controlling the size of the round-robin time quantum. Older Linux kernels provide a (nonportable) method of doing this. The quantum can be controlled by adjusting the process's nice value (see B(2)). Assigning a negative (i.e., high) nice value results in a longer quantum; assigning a positive (i.e., low) nice value results in a shorter quantum. The default quantum is 0.1 seconds; the degree to which changing the nice value affects the quantum has varied somewhat across kernel versions. This method of adjusting the quantum was removed starting with Linux 2.6.24." msgstr "POSIX ではラウンドロビン時間量の大きさを制御する仕組みが規定されていない。 古い Linux カーネルではこれを変更する方法が提供されている (この方法に移植性はない)。 プロセスの nice 値を調整することで時間量を制御できる (B(2) 参照)。 負の nice 値 (すなわち、高い nice 値) を割り当てると時間量は長くなり、 正の nice 値 (すなわち、低い nice 値) を割り当てると時間量は短くなる。 デフォルトの時間量は 0.1 秒である。 nice 値の変更が時間量にどの程度影響を与えるかは カーネルのバージョンにより多少異なる。時間量を調整するこのメソッドは Linux 2.6.24 以降で削除された。" #. commit ce0dbbbb30aee6a835511d5be446462388ba9eee #. .SH BUGS #. As of Linux 1.3.81 #. .BR sched_rr_get_interval () #. returns with error #. ENOSYS, because SCHED_RR has not yet been fully implemented and tested #. properly. #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:132 msgid "Linux 3.9 added a new mechanism for adjusting (and viewing) the B quantum: the I file exposes the quantum as a millisecond value, whose default is 100. Writing 0 to this file resets the quantum to the default value." msgstr "Linux 3.9 で、 B の時間量の調整 (と参照) を行う新しい機構が追加された。 I ファイルでミリ秒単位の時間量の値が参照でき、 デフォルト値は 100 である。 このファイルに 0 を書き込むと、 時間量をデフォルト値に戻すことができる。" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:134 build/C/man2/sched_yield.2:81 msgid "B(7)" msgstr "B(7)" #. type: TH #: build/C/man2/sched_setaffinity.2:34 #, no-wrap msgid "SCHED_SETAFFINITY" msgstr "SCHED_SETAFFINITY" #. type: TH #: build/C/man2/sched_setaffinity.2:34 #, no-wrap msgid "2014-12-31" msgstr "2014-12-31" #. type: Plain text #: build/C/man2/sched_setaffinity.2:38 msgid "sched_setaffinity, sched_getaffinity - set and get a thread's CPU affinity mask" msgstr "sched_setaffinity, sched_getaffinity - スレッドの CPU affinity マスクを設定・取得する" #. type: Plain text #: build/C/man2/sched_setaffinity.2:45 #, no-wrap msgid "" "BIB<, size_t >IB<,>\n" "B< const cpu_set_t *>IB<);>\n" msgstr "" "BIB<, size_t >IB<,>\n" "B< const cpu_set_t *>IB<);>\n" #. type: Plain text #: build/C/man2/sched_setaffinity.2:48 #, no-wrap msgid "" "BIB<, size_t >IB<,>\n" "B< cpu_set_t *>IB<);>\n" msgstr "" "BIB<, size_t >IB<,>\n" "B< cpu_set_t *>IB<);>\n" #. type: Plain text #: build/C/man2/sched_setaffinity.2:63 msgid "A thread's CPU affinity mask determines the set of CPUs on which it is eligible to run. On a multiprocessor system, setting the CPU affinity mask can be used to obtain performance benefits. For example, by dedicating one CPU to a particular thread (i.e., setting the affinity mask of that thread to specify a single CPU, and setting the affinity mask of all other threads to exclude that CPU), it is possible to ensure maximum execution speed for that thread. Restricting a thread to run on a single CPU also avoids the performance cost caused by the cache invalidation that occurs when a thread ceases to execute on one CPU and then recommences execution on a different CPU." msgstr "スレッドの CPU affinity (親和度) マスクは、そのスレッドが 実行を許可されている CPU の集合を決定する。 マルチプロセッサシステムでは、CPU affinity マスクを設定することで 性能上のメリットを得られる可能性がある。 例えば、特定のスレッドを一つの CPU に括り付け (すなわち、そのスレッドの affinity マスクを一つの CPU に設定し)、 他の全てのスレッドの affinity マスクからその CPU を除外することで、 確実にそのスレッドの実行速度を最大にすることができる。 また、あるスレッドの実行を一つの CPU に限定することで、 一つの CPU での実行を停止してから別の CPU で実行を再開するときに発生する キャッシュ無効化 (cache invalidation) による性能面の劣化を避けることもできる。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:70 msgid "A CPU affinity mask is represented by the I structure, a \"CPU set\", pointed to by I. A set of macros for manipulating CPU sets is described in B(3)." msgstr "CPU affinity マスクは「CPU の集合」を表す I 構造体で表現され、 I へのポインター I で指定される。 CPU 集合を操作するためのマクロ群については B(3) で記載されている。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:85 msgid "B() sets the CPU affinity mask of the thread whose ID is I to the value specified by I. If I is zero, then the calling thread is used. The argument I is the length (in bytes) of the data pointed to by I. Normally this argument would be specified as I." msgstr "B() は、スレッド ID が I のスレッドの CPU affinity マスクを I で指定された値に設定する。 I が 0 の場合、呼び出し元スレッドが使われる。 I 引き数には I が指すデータの長さ (バイト単位) である。 通常は、この引き数には I を指定すればよい。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:92 msgid "If the thread specified by I is not currently running on one of the CPUs specified in I, then that thread is migrated to one of the CPUs specified in I." msgstr "I で指定されたスレッドが I で指定された CPU のいずれかで現在実行されていない場合、 そのスレッドは I で指定された CPU のいずれかに移動される。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:107 msgid "B() writes the affinity mask of the thread whose ID is I into the I structure pointed to by I. The I argument specifies the size (in bytes) of I. If I is zero, then the mask of the calling thread is returned." msgstr "B() は、 スレッド ID が I のスレッドの affinity マスクを I が指す I 構造体に書き込む。 I 引き数には I の (バイト単位の) 大きさを指定する。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:116 msgid "On success, B() and B() return 0. On error, -1 is returned, and I is set appropriately." msgstr "成功した場合、 B() と B() は 0 を返す。 エラーの場合は -1 を返し、 I を適切に設定する。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:120 msgid "A supplied memory address was invalid." msgstr "指定されたメモリ番地が不正である。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:128 msgid "The affinity bit mask I contains no processors that are currently physically on the system and permitted to the thread according to any restrictions that may be imposed by the \"cpuset\" mechanism described in B(7)." msgstr "システム上に現在実際に存在し、かつ \"cpuset\" 機構が課す制限においてそのスレッドに対して許可されている プロセッサが、 affinity ビットマスク I に含まれていない。 \"cpuset\" 機構については B(7) を参照。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:135 msgid "(B() and, in kernels before 2.6.9, B()) I is smaller than the size of the affinity mask used by the kernel." msgstr "(B() と、カーネル 2.6.9 以前の B()) I がカーネルで使われている affinity マスクのサイズより小さい。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:145 msgid "(B()) The calling thread does not have appropriate privileges. The caller needs an effective user ID equal to the real user ID or effective user ID of the thread identified by I, or it must possess the B capability." msgstr "(B()) 呼び出し元のスレッドに適切な特権がなかった。 呼び出し元は、実効ユーザー ID が I で識別されるスレッドの実ユーザー ID または実効ユーザー ID と同じであるか、 B ケーパビリティ (capability) を持たなければならない。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:148 build/C/man2/sched_setattr.2:289 #: build/C/man2/sched_setscheduler.2:170 msgid "The thread whose ID is I could not be found." msgstr "ID が I のスレッドが見つからなかった。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:159 msgid "The CPU affinity system calls were introduced in Linux kernel 2.5.8. The system call wrappers were introduced in glibc 2.3. Initially, the glibc interfaces included a I argument, typed as I. In glibc 2.3.3, the I argument was removed, but was then restored in glibc 2.3.4, with type I." msgstr "CPU affinity システムコールは Linux kernel 2.5.8 で導入された。 これらのシステムコールのラッパー関数は glibc 2.3 で導入された。 最初は、glibc のインタフェースには I 型の I 引き数が入っていた。 glibc 2.3.3 では I 引き数が削除されたが、glibc 2.3.4 で I 型で復活した。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:161 msgid "These system calls are Linux-specific." msgstr "これらのシステムコールは Linux 固有である。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:174 msgid "After a call to B(), the set of CPUs on which the thread will actually run is the intersection of the set specified in the I argument and the set of CPUs actually present on the system. The system may further restrict the set of CPUs on which the thread runs if the \"cpuset\" mechanism described in B(7) is being used. These restrictions on the actual set of CPUs on which the thread will run are silently imposed by the kernel." msgstr "B() を呼び出した後は、スレッドが実際に実行される CPU の集合は、 I 引き数で指定された集合と、システム上に実際に存在する CPU の集合の 共通集合 (AND) となる。 \"cpuset\" 機構が使用されている場合には、スレッドが動作する CPU 集合 に対してシステムはさらに制限を加えるかもしれない (\"cpuset\" 機構については B(7) を参照)。 スレッドが動作する実際の CPU 集合に対する制限はカーネルにより 暗黙のうちに適用される。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:186 msgid "There are various ways of determining the number of CPUs available on the system, including: inspecting the contents of I; using B(3) to obtain the values of the B<_SC_NPROCESSORS_CONF> and B<_SC_NPROCESSORS_ONLN> parameters; and inspecting the list CPU directories under I." msgstr "システムで利用可能な CPU 数を判定する方法はいくつかある。 I の内容を調べる、 B(3) を使って B<_SC_NPROCESSORS_CONF> と B<_SC_NPROCESSORS_ONLN> の値を取得する、 I の CPU ディレクトリの一覧を調べる、などがある。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:189 msgid "B(7) has a description of the Linux scheduling scheme." msgstr "B(7) に Linux のスケジューリング方式についての説明がある。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:206 msgid "The affinity mask is a per-thread attribute that can be adjusted independently for each of the threads in a thread group. The value returned from a call to B(2) can be passed in the argument I. Specifying I as 0 will set the attribute for the calling thread, and passing the value returned from a call to B(2) will set the attribute for the main thread of the thread group. (If you are using the POSIX threads API, then use B(3) instead of B().)" msgstr "affinity マスクはスレッド単位の属性で、スレッドグループの 各スレッド単位に独立して調整することができる。 B(2) コールからの返り値をこのコールの I 引き数として渡すことができる。 I に 0 を指定すると呼び出し元のスレッドの属性が設定され、 B(2) コールからの返り値を I に指定するとスレッドグループのメインスレッドの属性が設定される (POSIX スレッド API を使用している場合、 B() の代わりに B(3) を使用すること)。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:212 msgid "A child created via B(2) inherits its parent's CPU affinity mask. The affinity mask is preserved across an B(2)." msgstr "B(2) 経由で生成された子プロセスは親プロセスの CPU affinity マスクを継承する。 affinity マスクは B(2) の前後で保存される。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:226 msgid "This manual page describes the glibc interface for the CPU affinity calls. The actual system call interface is slightly different, with the I being typed as I, reflecting the fact that the underlying implementation of CPU sets is a simple bit mask. On success, the raw B() system call returns the size (in bytes) of the I data type that is used internally by the kernel to represent the CPU set bit mask." msgstr "このマニュアルページでは CPU affinity コールの glibc インタフェースを 説明している。実際のシステムコールインタフェースは少し違っており、 実際の実装では CPU 集合は簡単なビットマスクであるという実状を反映し、 I の型が I となっている。 成功時には、生の B() システムコール自身は I データ型の (バイト単位の) 大きさを返す。 I はカーネル内部で CPU 集合のビットマスクを表現するのに 使われているデータ型である。" #. type: Plain text #: build/C/man2/sched_setaffinity.2:248 msgid "B(1), B(1), B(1), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(3), B(3), B(3), B(7), B(7), B(7)" msgstr "B(1), B(1), B(1), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(3), B(3), B(3), B(7), B(7), B(7)" #. type: TH #: build/C/man2/sched_setattr.2:26 #, no-wrap msgid "SCHED_SETATTR" msgstr "SCHED_SETATTR" #. type: TH #: build/C/man2/sched_setattr.2:26 build/C/man2/sched_setscheduler.2:26 #: build/C/man7/sched.7:32 #, no-wrap msgid "2014-10-02" msgstr "2014-10-02" #. type: Plain text #: build/C/man2/sched_setattr.2:30 msgid "sched_setattr, sched_getattr - set and get scheduling policy and attributes" msgstr "sched_setattr, sched_getattr - スケジューリングポリシーと属性の設定と取得を行なう" #. type: Plain text #: build/C/man2/sched_setattr.2:36 #, no-wrap msgid "" "BIB<, const struct sched_attr *>IB<,>\n" "B< unsigned int >IB<);>\n" msgstr "" "BIB<, const struct sched_attr *>IB<,>\n" "B< unsigned int >IB<);>\n" #. type: Plain text #: build/C/man2/sched_setattr.2:39 #, no-wrap msgid "" "BIB<, const struct sched_attr *>IB<,>\n" "B< unsigned int >IB<, unsigned int >IB<);>\n" msgstr "" "BIB<, const struct sched_attr *>IB<,>\n" "B< unsigned int >IB<, unsigned int >IB<);>\n" #. type: SS #: build/C/man2/sched_setattr.2:42 #, no-wrap msgid "sched_setattr()" msgstr "sched_setattr()" #. type: Plain text #: build/C/man2/sched_setattr.2:52 msgid "The B() system call sets the scheduling policy and associated attributes for the thread whose ID is specified in I. If I equals zero, the scheduling policy and attributes of the calling thread will be set." msgstr "B() システムコールは、 I で指定された ID を持つスレッドのスケジューリングポリシーと関連する属性を設定する。 I が 0 の場合、呼び出したスレッド自身のスケジューリングポリシーと属性が設定される。" #. type: Plain text #: build/C/man2/sched_setattr.2:56 build/C/man2/sched_setscheduler.2:73 msgid "Currently, Linux supports the following \"normal\" (i.e., non-real-time) scheduling policies as values that may be specified in I:" msgstr "現在のところ、 Linux では、 以下の「通常」の (つまり、リアルタイムではない) スケジューリングポリシーが、 I に指定できる値としてサポートされている。" #. type: TP #: build/C/man2/sched_setattr.2:56 build/C/man2/sched_setscheduler.2:73 #, no-wrap msgid "B" msgstr "B" #. In the 2.6 kernel sources, SCHED_OTHER is actually called #. SCHED_NORMAL. #. type: Plain text #: build/C/man2/sched_setattr.2:61 build/C/man2/sched_setscheduler.2:78 msgid "the standard round-robin time-sharing policy;" msgstr "標準の、ラウンドロビンによる時分割型のスケジューリングポリシー。" #. type: TP #: build/C/man2/sched_setattr.2:61 build/C/man2/sched_setscheduler.2:78 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/sched_setattr.2:64 build/C/man2/sched_setscheduler.2:81 msgid "for \"batch\" style execution of processes; and" msgstr "「バッチ」形式でのプロセスの実行用。" #. type: TP #: build/C/man2/sched_setattr.2:64 build/C/man2/sched_setscheduler.2:81 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/sched_setattr.2:69 build/C/man2/sched_setscheduler.2:86 msgid "for running I low priority background jobs." msgstr "「非常に」低い優先度で動作するバックグラウンドジョブ用。" #. type: Plain text #: build/C/man2/sched_setattr.2:78 build/C/man2/sched_setscheduler.2:99 msgid "Various \"real-time\" policies are also supported, for special time-critical applications that need precise control over the way in which runnable threads are selected for execution. For the rules governing when a process may use these policies, see B(7). The real-time policies that may be specified in I are:" msgstr "どの実行可能スレッドを選択するかについて、より正確な制御を必要とする 時間の制約が厳しい特別なアプリケーション用として、 いろいろな「リアルタイム」ポリシーもサポートされている。 プロセスがこれらのポリシーをいつ使用できるかを決めるルールについては、B(7) を参照。 I には以下のリアルタイムポリシーを指定できる。" #. type: TP #: build/C/man2/sched_setattr.2:78 build/C/man2/sched_setscheduler.2:99 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/sched_setattr.2:81 build/C/man2/sched_setscheduler.2:102 msgid "a first-in, first-out policy; and" msgstr "ファーストイン、ファーストアウト型のポリシー。" #. type: TP #: build/C/man2/sched_setattr.2:81 build/C/man2/sched_setscheduler.2:102 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/sched_setattr.2:84 build/C/man2/sched_setscheduler.2:105 msgid "a round-robin policy." msgstr "ラウンドロビン型のポリシー。" #. type: Plain text #: build/C/man2/sched_setattr.2:86 msgid "Linux also provides the following policy:" msgstr "Linux では以下のポリシーも提供されている。" #. type: TP #: build/C/man2/sched_setattr.2:86 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/sched_setattr.2:91 msgid "a deadline scheduling policy; see B(7) for details." msgstr "デッドライン (応答期限) ベースのスケジューリングポリシー。詳細は B(7) を参照。" #. type: Plain text #: build/C/man2/sched_setattr.2:97 msgid "The I argument is a pointer to a structure that defines the new scheduling policy and attributes for the specified thread. This structure has the following form:" msgstr "I 引き数は、 指定したスレッドの新しいスケジューリングポリシーと属性を定義した構造体へのポインターである。 この構造体は以下の形式である。" #. type: Plain text #: build/C/man2/sched_setattr.2:113 #, no-wrap msgid "" "struct sched_attr {\n" " u32 size; /* Size of this structure */\n" " u32 sched_policy; /* Policy (SCHED_*) */\n" " u64 sched_flags; /* Flags */\n" " s32 sched_nice; /* Nice value (SCHED_OTHER,\n" " SCHED_BATCH) */\n" " u32 sched_priority; /* Static priority (SCHED_FIFO,\n" " SCHED_RR) */\n" " /* Remaining fields are for SCHED_DEADLINE */\n" " u64 sched_runtime;\n" " u64 sched_deadline;\n" " u64 sched_period;\n" "};\n" msgstr "" "struct sched_attr {\n" " u32 size; /* この構造体のサイズ */\n" " u32 sched_policy; /* ポリシー (SCHED_*) */\n" " u64 sched_flags; /* フラグ */\n" " s32 sched_nice; /* nice 値 (SCHED_OTHER,\n" " SCHED_BATCH) */\n" " u32 sched_priority; /* 静的優先度 (SCHED_FIFO,\n" " SCHED_RR) */\n" " /* 残りのフィールドは SCHED_DEADLINE 用である */\n" " u64 sched_runtime;\n" " u64 sched_deadline;\n" " u64 sched_period;\n" "};\n" #. type: Plain text #: build/C/man2/sched_setattr.2:117 msgid "The fields of this structure are as follows:" msgstr "この構造体のフィールドは以下の通りである。" #. type: TP #: build/C/man2/sched_setattr.2:117 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/sched_setattr.2:132 msgid "This field should be set to the size of the structure in bytes, as in I. If the provided structure is smaller than the kernel structure, any additional fields are assumed to be '0'. If the provided structure is larger than the kernel structure, the kernel verifies that all additional fields are 0; if they are not, B() fails with the error B and updates I to contain the size of the kernel structure." msgstr "このフィールドには、 構造体のバイト単位のサイズを設定する。 I を指定すればよい。 指定された構造体がカーネル構造体よりも小さい場合、 追加となるフィールドは 0 とみなされる。 指定された構造体がカーネル構造体よりも大きい場合、 カーネルは追加のフィールドが 0 であるかを検査する。 0 でない場合は B() はエラー B で失敗するので、 I をカーネル構造体のサイズに更新する必要がある。" #. type: Plain text #: build/C/man2/sched_setattr.2:146 msgid "The above behavior when the size of the user-space I structure does not match the size of the kernel structure allows for future extensibility of the interface. Malformed applications that pass oversize structures won't break in the future if the size of the kernel I structure is increased. In the future, it could also allow applications that know about a larger user-space I structure to determine whether they are running on an older kernel that does not support the larger structure." msgstr "ユーザー空間の I 構造体のサイズがカーネル構造体のサイズと一致しなかった場合の上記の動作は、 このインタフェースを将来拡張できるようにするためである。 サイズが大きい構造体を渡す行儀の良くないアプリケーションも、 将来カーネルの I 構造体のサイズが大きくなったとしてもおかしくならない。 この仕組みにより、 将来的には、 大きなユーザー空間 I 構造体があることを知っているアプリケーションで、 大きいサイズの構造体に対応していない古いカーネル上で動作しているかを判定することができる。" #. type: TP #: build/C/man2/sched_setattr.2:146 #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: build/C/man2/sched_setattr.2:151 msgid "This field specifies the scheduling policy, as one of the B values listed above." msgstr "このフィールドはスケジューリングポリシーを指定する。 上記のリストにある B 値のいずれかを指定する。" #. type: TP #: build/C/man2/sched_setattr.2:151 #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: build/C/man2/sched_setattr.2:162 msgid "This field contains flags controlling scheduling behavior. Only one such flag is currently defined: B. As a result of including this flag, children created by B(2) do not inherit privileged scheduling policies. See B(7) for details." msgstr "このフィールドはスケジューリング動作の制御を行う。 現在のところ、サポートされているフラグは B の一つだけである。 このフラグが指定されると、 B(2) で作成された子プロセスは特権が必要なスケジューリングポリシーを継承しない。 詳細は B(7) を参照。" #. type: TP #: build/C/man2/sched_setattr.2:162 #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: build/C/man2/sched_setattr.2:173 msgid "This field specifies the nice value to be set when specifying I as B or B. The nice value is a number in the range -20 (high priority) to +19 (low priority); see B(2)." msgstr "このフィールドは、 I に B か B が指定された場合に設定される nice 値を指定する。 nice 値は -20 (高優先度) から +19 (低優先度) の範囲の数値である。 B(2) を参照。" #. type: TP #: build/C/man2/sched_setattr.2:173 #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: build/C/man2/sched_setattr.2:186 msgid "This field specifies the static priority to be set when specifying I as B or B. The allowed range of priorities for these policies can be determined using B(2) and B(2). For other policies, this field must be specified as 0." msgstr "このフィールドは、 I に B か B が指定された場合に設定される静的優先度を指定する。 これらのポリシーで指定できる優先度の範囲は、 B(2) と B(2) を使って判定できる。 他のポリシーでは、 このフィールドには 0 を指定しなければならない。" #. type: TP #: build/C/man2/sched_setattr.2:186 #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: build/C/man2/sched_setattr.2:195 msgid "This field specifies the \"Runtime\" parameter for deadline scheduling. The value is expressed in nanoseconds. This field, and the next two fields, are used only for B scheduling; for further details, see B(7)." msgstr "このフィールドは、 デッドラインスケジューリングの \"Runtime\" パラメーターを指定する。 この値はナノ秒単位で表現される。 このフィールドと次の 2 つのフィールドは B スケジューリングにおいてのみ使用される。 詳細は B(7) を参照。" #. type: TP #: build/C/man2/sched_setattr.2:195 #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: build/C/man2/sched_setattr.2:199 msgid "This field specifies the \"Deadline\" parameter for deadline scheduling. The value is expressed in nanoseconds." msgstr "このフィールドは、 デッドラインスケジューリングの \"Deadline\" パラメーターを指定する。 この値はナノ秒単位で表現される。" #. type: TP #: build/C/man2/sched_setattr.2:199 #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: build/C/man2/sched_setattr.2:203 msgid "This field specifies the \"Period\" parameter for deadline scheduling. The value is expressed in nanoseconds." msgstr "このフィールドは、 デッドラインスケジューリングの \"Period\" パラメーターを指定する。 この値はナノ秒単位で表現される。" #. type: Plain text #: build/C/man2/sched_setattr.2:210 build/C/man2/sched_setattr.2:262 msgid "The I argument is provided to allow for future extensions to the interface; in the current implementation it must be specified as 0." msgstr "I 引き数は、このインタフェースの将来の拡張のために用意されている。 現在の実装では 0 を指定しなければならない。" #. type: SS #: build/C/man2/sched_setattr.2:210 #, no-wrap msgid "sched_getattr()" msgstr "sched_getattr()" #. type: Plain text #: build/C/man2/sched_setattr.2:221 msgid "The B() system call fetches the scheduling policy and the associated attributes for the thread whose ID is specified in I. If I equals zero, the scheduling policy and attributes of the calling thread will be retrieved." msgstr "B() システムコールは、 I で指定された ID を持つスレッドのスケジューリングポリシーと関連する属性を取得する。 I が 0 の場合、呼び出したスレッド自身のスケジューリングポリシーと関連する属性を取得する。" #. type: Plain text #: build/C/man2/sched_setattr.2:231 msgid "The I argument should be set to the size of the I structure as known to user space. The value must be at least as large as the size of the initially published I structure, or the call fails with the error B." msgstr "I 引き数には、 ユーザー空間での I 構造体の大きさを設定する。 この値は、 少なくとも初期バージョンの I 構造体のサイズでなければならない。 そうでなかった場合、 エラー B で呼び出しが失敗する。" #. type: Plain text #: build/C/man2/sched_setattr.2:241 msgid "The retrieved scheduling attributes are placed in the fields of the I structure pointed to by I. The kernel sets I to the size of its I structure." msgstr "取得したスケジューリング属性は、 I が指す I 構造体の各フィールドに格納される。 カーネルは I に I 構造体のサイズを設定する。" #. type: Plain text #: build/C/man2/sched_setattr.2:257 msgid "If the caller-provided I buffer is larger than the kernel's I structure, the additional bytes in the user-space structure are not touched. If the caller-provided structure is smaller than the kernel I structure and the kernel needs to return values outside the provided space, B() fails with the error B. As with B(), these semantics allow for future extensibility of the interface." msgstr "呼び出し側が提供した I バッファーがカーネルの I 構造体よりも大きい場合、 ユーザー空間構造体の残りのバイトは変更されない。 呼び出し側が提供した構造体がカーネルの I 構造体よりも小さく、 カーネルが値を返すのにもっと大きな空間が必要な場合、 B() はエラー B で失敗する。 B() と同様、 この動作はこのインタフェースの将来の拡張性を考慮してのものである。" #. type: Plain text #: build/C/man2/sched_setattr.2:271 msgid "On success, B() and B() return 0. On error, -1 is returned, and I is set to indicate the cause of the error." msgstr "成功した場合は B() と B() は 0 を返す。 エラーの場合は -1 が返され、 エラーの原因を示す値が I に設定される。" #. type: Plain text #: build/C/man2/sched_setattr.2:276 msgid "B() and B() can both fail for the following reasons:" msgstr "B() と B() の両方が以下の理由で失敗する。" #. type: Plain text #: build/C/man2/sched_setattr.2:284 msgid "I is NULL; or I is negative; or I is not zero." msgstr "I が NULL である。 I が負である。 I が 0 以外である。" #. type: Plain text #: build/C/man2/sched_setattr.2:293 msgid "In addition, B() can fail for the following reasons:" msgstr "さらに、 B() は以下の理由でも失敗する。" #. type: TP #: build/C/man2/sched_setattr.2:293 build/C/man2/sched_setattr.2:310 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/sched_setattr.2:300 msgid "The buffer specified by I and I is too small." msgstr "I と I で指定されたバッファーが小さすぎる。" #. type: Plain text #: build/C/man2/sched_setattr.2:306 msgid "I is invalid; that is, it is smaller than the initial version of the I structure (48 bytes) or larger than the system page size." msgstr "I が無効である。つまり、 最初のバージョンの I 構造体 (48 バイト) よりも小さいか、 システムのページサイズよりも大きい。" #. type: Plain text #: build/C/man2/sched_setattr.2:310 msgid "In addition, B() can fail for the following reasons:" msgstr "さらに、 B() は以下の理由でも失敗する。" #. type: Plain text #: build/C/man2/sched_setattr.2:318 msgid "The buffer specified by I and I is larger than the kernel structure, and one or more of the excess bytes is nonzero." msgstr "I と I で指定されたバッファーがカーネル構造体よりも大きく、 一つ以上の超過バイトが 0 でなかった。" #. type: TP #: build/C/man2/sched_setattr.2:318 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/sched_setattr.2:323 msgid "B admission control failure, see B(7)." msgstr "B の流入制御の失敗については B(7) を参照。" #. type: Plain text #: build/C/man2/sched_setattr.2:339 msgid "I is not one of the recognized policies; I contains a flag other than B; or I is invalid; or I is B and the deadline scheduling parameters in I are invalid." msgstr "I が認識できるポリシーではない。 I に B 以外のフラグが含まれている。 I が無効である。 I が B で、 I に指定されたデッドラインスケジューリングパラメーターが無効である。" #. type: Plain text #: build/C/man2/sched_setattr.2:342 msgid "The caller does not have appropriate privileges." msgstr "呼び出した元が適切な特権を持っていない。" #. type: Plain text #: build/C/man2/sched_setattr.2:348 msgid "The caller's CPU affinity mask does not include all CPUs in the system (see B(2))." msgstr "呼び出し元の CPU affinity マスクにシステムの全ての CPU のうち含まれていないものがある (B(2) を参照)。" #. FIXME . Add glibc version #. type: Plain text #: build/C/man2/sched_setattr.2:351 msgid "These system calls first appeared in Linux 3.14." msgstr "これらのシステムコールは Linux 3.14 で初めて登場した。" #. type: Plain text #: build/C/man2/sched_setattr.2:353 msgid "These system calls are nonstandard Linux extensions." msgstr "これらのシステムコールは非標準の Linux による拡張である。" #. type: Plain text #: build/C/man2/sched_setattr.2:369 msgid "B() provides a superset of the functionality of B(2), B(2), B(2), and (other than the ability to set the priority of all processes belonging to a specified user or all processes in a specified group) B(2). Analogously, B() provides a superset of the functionality of B(2), B(2), and (partially) B(2)." msgstr "B() は、B(2), B(2), B(2) の機能および B の一部機能を持つ (ただし、B(2) の、指定されたユーザーに所属するすべてのプロセスまたは指定されたグループのすべてのプロセスの優先度を設定する機能は除く)。 同様に、 B() は B(2), B(2) の機能および B(2) の一部機能を持つ。" #. FIXME . patch sent to Peter Zijlstra #. In Linux versions up to up 3.15, #. FIXME . patch from Peter Zijlstra pending #. .BR sched_setattr () #. allowed a negative #. .I attr.sched_policy #. value. #. type: Plain text #: build/C/man2/sched_setattr.2:385 msgid "In Linux versions up to 3.15, B() failed with the error B instead of B for the case described in ERRORS." msgstr "バージョン 3.15 までの Linux では、 B() は、 エラーの節に書かれている B の場合にエラーB で失敗していた。" #. type: Plain text #: build/C/man2/sched_setattr.2:407 msgid "B(1), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(3), B(3), B(3), B(7), B(7), B(7)" msgstr "B(1), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(3), B(3), B(3), B(7), B(7), B(7)" #. type: TH #: build/C/man2/sched_setparam.2:30 #, no-wrap msgid "SCHED_SETPARAM" msgstr "SCHED_SETPARAM" #. type: TH #: build/C/man2/sched_setparam.2:30 #, no-wrap msgid "2014-05-11" msgstr "2014-05-11" #. type: Plain text #: build/C/man2/sched_setparam.2:33 msgid "sched_setparam, sched_getparam - set and get scheduling parameters" msgstr "sched_setparam, sched_getparam - スケジューリングパラメーターの設定と取得を行なう" #. type: Plain text #: build/C/man2/sched_setparam.2:38 #, no-wrap msgid "BIB<, const struct sched_param *>IB<);>\n" msgstr "BIB<, const struct sched_param *>IB<);>\n" #. type: Plain text #: build/C/man2/sched_setparam.2:40 #, no-wrap msgid "BIB<, struct sched_param *>IB<);>\n" msgstr "BIB<, struct sched_param *>IB<);>\n" #. type: Plain text #: build/C/man2/sched_setparam.2:46 #, no-wrap msgid "" "BIB<;\n" " ...\n" "};>\n" msgstr "" "BIB<;\n" " ...\n" "};>\n" #. type: Plain text #: build/C/man2/sched_setparam.2:60 msgid "B() sets the scheduling parameters associated with the scheduling policy for the process identified by I. If I is zero, then the parameters of the calling process are set. The interpretation of the argument I depends on the scheduling policy of the process identified by I. See B(7) for a description of the scheduling policies supported under Linux." msgstr "B() は I で指定されたプロセスのスケジューリング方針 (scheduling policy) に 関連するスケジューリングパラメーターを設定する。 I が 0 ならば、呼び出し元のプロセスのパラメーターが設定される。 引き数 I の解釈は、 I で指定されたプロセスのスケジューリング方針によって異なる。 Linux でサポートされているスケジューリング方針の説明は B(7) を参照のこと。" #. type: Plain text #: build/C/man2/sched_setparam.2:66 msgid "B() retrieves the scheduling parameters for the process identified by I. If I is zero, then the parameters of the calling process are retrieved." msgstr "B() は I で指定されたプロセスのスケジューリングパラメーターを取得する。 I が 0 ならば、呼び出し元のプロセスのパラメーターを取得する。" #. type: Plain text #: build/C/man2/sched_setparam.2:75 msgid "B() checks the validity of I for the scheduling policy of the thread. The value Isched_priority> must lie within the range given by B(2) and B(2)." msgstr "B() はスレッドのスケジューリング方針における I の妥当性をチェックする。 Isched_priority> の値は B(2) と B(2) の範囲に入っていなければならない。" #. type: Plain text #: build/C/man2/sched_setparam.2:79 msgid "For a discussion of the privileges and resource limits related to scheduling priority and policy, see B(7)." msgstr "スケジューリングの優先度と方針に関連する特権とリソース制限の 議論に関しては B(7) を参照のこと。" #. type: Plain text #: build/C/man2/sched_setparam.2:87 msgid "POSIX systems on which B() and B() are available define B<_POSIX_PRIORITY_SCHEDULING> in Iunistd.hE>." msgstr "B() と B() が使用できる POSIX システムでは、 Iunistd.hE> に B<_POSIX_PRIORITY_SCHEDULING> が定義されている。" #. type: Plain text #: build/C/man2/sched_setparam.2:96 msgid "On success, B() and B() return 0. On error, -1 is returned, and I is set appropriately." msgstr "成功した場合は B() と B() は 0 を返す。 エラーの場合は -1 が返され、 I が適切に設定される。" #. type: Plain text #: build/C/man2/sched_setparam.2:104 msgid "Invalid arguments: I is NULL or I is negative" msgstr "無効な引き数: I が NULL である、または I が負である。" #. type: Plain text #: build/C/man2/sched_setparam.2:109 msgid "(B()) The argument I does not make sense for the current scheduling policy." msgstr "(B()) 引き数 I が現在のスケジューリング方針においては 無意味である。" #. type: Plain text #: build/C/man2/sched_setparam.2:116 msgid "(B()) The calling process does not have appropriate privileges (Linux: does not have the B capability)." msgstr "(B()) 呼び出し元のプロセスが適切な特権を持っていない (Linux では、 B ケーパビリティを持っていない)。" #. type: Plain text #: build/C/man2/sched_setparam.2:119 msgid "The process whose ID is I could not be found." msgstr "プロセス ID I のプロセスが見つからなかった。" #. type: Plain text #: build/C/man2/sched_setparam.2:127 msgid "Scheduling parameters are in fact per-thread attributes on Linux; see B(7)." msgstr "Linux では、スケジューリングパラメーターは実際にはスレッド単位の属性である。 B(7) 参照。" #. type: Plain text #: build/C/man2/sched_setparam.2:142 msgid "B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(7), B(7)" msgstr "B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(7), B(7)" #. type: TH #: build/C/man2/sched_setscheduler.2:26 #, no-wrap msgid "SCHED_SETSCHEDULER" msgstr "SCHED_SETSCHEDULER" #. type: Plain text #: build/C/man2/sched_setscheduler.2:30 msgid "sched_setscheduler, sched_getscheduler - set and get scheduling policy/parameters" msgstr "sched_setscheduler, sched_getscheduler - スケジューリングポリシーとパラメーターを設定/取得する" #. type: Plain text #: build/C/man2/sched_setscheduler.2:35 #, no-wrap msgid "BIB<, int >IB<,>\n" msgstr "BIB<, int >IB<,>\n" #. type: Plain text #: build/C/man2/sched_setscheduler.2:37 #, no-wrap msgid "B< const struct sched_param *>IB<);>\n" msgstr "B< const struct sched_param *>IB<);>\n" #. type: Plain text #: build/C/man2/sched_setscheduler.2:39 #, no-wrap msgid "BIB<);>\n" msgstr "BIB<);>\n" #. type: Plain text #: build/C/man2/sched_setscheduler.2:49 msgid "The B() system call sets both the scheduling policy and parameters for the thread whose ID is specified in I. If I equals zero, the scheduling policy and parameters of the calling thread will be set." msgstr "B() システムコールは、 I で指定された ID を持つスレッドのスケジューリングポリシーとスケジューリングパラメーターの両方を設定する。 I が 0 の場合、呼び出したスレッド自身のスケジューリングポリシーとスケジューリングパラメーターが設定される。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:53 msgid "The scheduling parameters are specified in the I argument, which is a pointer to a structure of the following form:" msgstr "スケジューリングパラメーターは I 引き数で、以下の形式の構造体へのポインターを指定する。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:61 #, no-wrap msgid "" "struct sched_param {\n" " ...\n" " int sched_priority;\n" " ...\n" "};\n" msgstr "" "struct sched_param {\n" " ...\n" " int sched_priority;\n" " ...\n" "};\n" #. type: Plain text #: build/C/man2/sched_setscheduler.2:69 msgid "In the current implementation, the structure contains only one field, I. The interpretation of I depends on the selected policy." msgstr "現在の実装では、この構造体のフィールドは I だけである。 I がどのように解釈されるかは選択されたポリシーによって変わる。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:90 msgid "For each of the above policies, Isched_priority> must be 0." msgstr "上記のどのポリシーの場合でも、 Isched_priority> は 0 でなければならない。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:116 msgid "For each of the above policies, Isched_priority> specifies a scheduling priority for the thread. This is a number in the range returned by calling B(2) and B(2) with the specified I. On Linux, these system calls return, respectively, 1 and 99." msgstr "上記のどのポリシーの場合でも、 Isched_priority> はそのスレッドのスケジューリングポリシーを指定する。 指定された I で I(2) と I(2) を呼び出した返り値の範囲の数字を指定する。 Linux では、これらのシステムコールはそれぞれ 1 と 99 を返す。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:129 msgid "Since Linux 2.6.32, the B flag can be ORed in I when calling B(). As a result of including this flag, children created by B(2) do not inherit privileged scheduling policies. See B(7) for details." msgstr "Linux 2.6.32 以降では、 B() を呼び出す際に I に B フラグを OR で指定できる。このフラグが指定されると、 B(2) で作成された子プロセスは特権が必要なスケジューリングポリシーを継承しない。 詳細は B(7) を参照。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:135 msgid "B() returns the current scheduling policy of the thread identified by I. If I equals zero, the policy of the calling thread will be retrieved." msgstr "B() は I で識別されるスレッドの現在のスケジューリングポリシーを返す。I が 0 ならば、呼び出した スレッド自身のスケジューリングポリシーが返される。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:145 msgid "On success, B() returns zero. On success, B() returns the policy for the thread (a nonnegative integer). On error, both calls return -1, and I is set appropriately." msgstr "成功した場合、 B() は 0 を返す。 成功した場合、 B() は現在のそのスレッドのポリシー (非負の整数) を返す。 エラーの場合、 どちらのコールも -1 を返し、 I が適切に設定される。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:153 msgid "Invalid arguments: I is negative or I is NULL." msgstr "無効な引き数: I が負である、または I が NULL である。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:158 msgid "(B()) I is not one of the recognized policies." msgstr "(B()) I が認識できるポリシーではない。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:164 msgid "(B()) I does not make sense for the specified I." msgstr "(B()) 引き数 I が指定された I では意味を持たない。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:167 msgid "The calling thread does not have appropriate privileges." msgstr "呼び出したスレッドが適切な特権を持っていない。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:173 msgid "POSIX.1-2001 (but see BUGS below). The B and B policies are Linux-specific." msgstr "POSIX.1-2001 (但し、下記のバグの節も参照)。 B と B ポリシーは Linux 固有である。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:177 msgid "Further details of the semantics of all of the above \"normal\" and \"real-time\" scheduling policies can be found in B(7)." msgstr "上記の「通常」および「リアルタイム」スケジューリングポリシーの動作の詳細な説明は B(7) にある。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:185 msgid "POSIX systems on which B() and B() are available define B<_POSIX_PRIORITY_SCHEDULING> in Iunistd.hE>." msgstr "POSIX システムでは Iunistd.hE> に B<_POSIX_PRIORITY_SCHEDULING> が定義されている場合にのみ B() と B() が使用できる。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:193 msgid "POSIX.1 does not detail the permissions that an unprivileged thread requires in order to call B(), and details vary across systems. For example, the Solaris 7 manual page says that the real or effective user ID of the caller must match the real user ID or the save set-user-ID of the target." msgstr "POSIX.1 は、非特権スレッドが B() を呼び出すために必要な権限の詳細を規定しておらず、 詳細はシステムにより異なる。 例えば、Solaris 7 のマニュアルページでは、 呼び出し元の実ユーザー ID または実効ユーザー ID が 設定対象の実ユーザー ID か保存 (save) set-user-ID と 一致していなければならない、となっている。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:214 msgid "The scheduling policy and parameters are in fact per-thread attributes on Linux. The value returned from a call to B(2) can be passed in the argument I. Specifying I as 0 will operate on the attributes of the calling thread, and passing the value returned from a call to B(2) will operate on the attributes of the main thread of the thread group. (If you are using the POSIX threads API, then use B(3), B(3), and B(3), instead of the B(2) system calls.)" msgstr "Linux では、 スケジューリングポリシーとスケジューリングパラメーターは、 実際にはスレッド単位の属性である。 B(2) の呼び出しの返り値をこのシステムコールの I 引き数として渡すことができる。 I に 0 を指定すると、 呼び出し元のスレッドの属性が設定される。 B(2) コールからの返り値を I に指定すると、 スレッドグループのメインスレッドの属性が設定される (POSIX スレッド API を使用している場合は、 B(2) システムコールの代わりに B(3), B(3), and B(3) を使用すること)。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:222 msgid "POSIX says that on success, B() should return the previous scheduling policy. Linux B() does not conform to this requirement, since it always returns 0 on success." msgstr "POSIX では、成功時に B() は直前のスケジューリングポリシーを返すべきとされている。 Linux の B() はこの要求仕様に準拠しておらず、 成功時には常に 0 を返す。" #. type: Plain text #: build/C/man2/sched_setscheduler.2:241 msgid "B(1), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(7), B(7), B(7)" msgstr "B(1), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(7), B(7), B(7)" #. type: TH #: build/C/man2/sched_yield.2:29 #, no-wrap msgid "SCHED_YIELD" msgstr "SCHED_YIELD" #. type: Plain text #: build/C/man2/sched_yield.2:32 msgid "sched_yield - yield the processor" msgstr "sched_yield - プロセッサーを空け渡す(yield)" #. type: Plain text #: build/C/man2/sched_yield.2:36 msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/sched_yield.2:41 msgid "B() causes the calling thread to relinquish the CPU. The thread is moved to the end of the queue for its static priority and a new thread gets to run." msgstr "B() を呼び出すことで、呼び出したスレッドが CPU の使用権を手放すことができる。 そのスレッドは、そのスレッドの静的プライオリティのキューの末尾に 移動し、新しいスレッドが走り始める。" #. type: Plain text #: build/C/man2/sched_yield.2:48 msgid "On success, B() returns 0. On error, -1 is returned, and I is set appropriately." msgstr "成功した場合は B() は 0 を返す。 エラーの場合は -1 が返され、 I が適切に設定される。" #. type: Plain text #: build/C/man2/sched_yield.2:52 msgid "In the Linux implementation, B() always succeeds." msgstr "Linux の実装では、 B() は常に成功する。" #. type: Plain text #: build/C/man2/sched_yield.2:59 msgid "If the calling thread is the only thread in the highest priority list at that time, it will continue to run after a call to B()." msgstr "B() を呼び出した時点で最大優先度のリストの中に呼び出し元のスレッドしか 存在しなければ、そのスレッドは呼び出し後も走り続けることになる。" #. type: Plain text #: build/C/man2/sched_yield.2:66 msgid "POSIX systems on which B() is available define B<_POSIX_PRIORITY_SCHEDULING> in Iunistd.hE>." msgstr "POSIX システムで B() は Iunistd.hE> に B<_POSIX_PRIORITY_SCHEDULING> が定義されている場合にのみ使用可能である。" #. type: Plain text #: build/C/man2/sched_yield.2:79 msgid "Strategic calls to B() can improve performance by giving other threads or processes a chance to run when (heavily) contended resources (e.g., mutexes) have been released by the caller. Avoid calling B() unnecessarily or inappropriately (e.g., when resources needed by other schedulable threads are still held by the caller), since doing so will result in unnecessary context switches, which will degrade system performance." msgstr "B() を戦略的に呼び出すことで、(極度に) 競合するリソース (mutex など) を呼び出し元が解放した際に他のスレッドやプロセスに実行機会を与えることで、 性能を上げることができる。 B() を必要もないのに呼び出したり、不適切な場面 (例えば、他のスケジューリング 対象となるスレッドが必要とするリソースを呼び出し元が保持したままの状態) で呼び出したりするのは避けること。なぜなら、 B() の呼び出しより不必要なコンテキストスイッチが起こり、システム性能が 劣化する結果になるからである。" #. type: TH #: build/C/man7/sched.7:32 #, no-wrap msgid "SCHED" msgstr "SCHED" #. type: Plain text #: build/C/man7/sched.7:35 msgid "sched - overview of scheduling APIs" msgstr "sched - スケジューリング API の概要" #. type: SS #: build/C/man7/sched.7:36 #, no-wrap msgid "API summary" msgstr "API の概要" #. type: Plain text #: build/C/man7/sched.7:38 msgid "The Linux scheduling APIs are as follows:" msgstr "Linux のスケジューリング API は以下のとおりである。" #. type: TP #: build/C/man7/sched.7:38 #, no-wrap msgid "B(2)" msgstr "B(2)" #. type: Plain text #: build/C/man7/sched.7:41 msgid "Set the scheduling policy and parameters of a specified thread." msgstr "指定されたスレッドのスケジューリングポリシーとパラメーターを設定する。" #. type: TP #: build/C/man7/sched.7:41 #, no-wrap msgid "B(2)" msgstr "B(2)" #. type: Plain text #: build/C/man7/sched.7:44 msgid "Return the scheduling policy of a specified thread." msgstr "指定されたスレッドのスケジューリングポリシーを返す。" #. type: TP #: build/C/man7/sched.7:44 #, no-wrap msgid "B(2)" msgstr "B(2)" #. type: Plain text #: build/C/man7/sched.7:47 msgid "Set the scheduling parameters of a specified thread." msgstr "指定されたスレッドのスケジューリングパラメーターを設定する。" #. type: TP #: build/C/man7/sched.7:47 #, no-wrap msgid "B(2)" msgstr "B(2)" #. type: Plain text #: build/C/man7/sched.7:50 msgid "Fetch the scheduling parameters of a specified thread." msgstr "指定されたスレッドのスケジューリングパラメーターを取得する。" #. type: TP #: build/C/man7/sched.7:50 #, no-wrap msgid "B(2)" msgstr "B(2)" #. type: Plain text #: build/C/man7/sched.7:53 msgid "Return the minimum priority available in a specified scheduling policy." msgstr "指定されたスケジューリングポリシーで利用可能な最小の優先度を返す。" #. type: TP #: build/C/man7/sched.7:53 #, no-wrap msgid "B(2)" msgstr "B(2)" #. type: Plain text #: build/C/man7/sched.7:56 msgid "Return the maximum priority available in a specified scheduling policy." msgstr "指定されたスケジューリングポリシーで利用可能な最大の優先度を返す。" #. type: TP #: build/C/man7/sched.7:56 #, no-wrap msgid "B(2)" msgstr "B(2)" #. type: Plain text #: build/C/man7/sched.7:60 msgid "Fetch the quantum used for threads that are scheduled under the \"round-robin\" scheduling policy." msgstr "「ラウンドロビン」スケジューリングポリシーでスケジューリグされるスレッドで使用される単位時間 (quantum) を取得する。" #. type: TP #: build/C/man7/sched.7:60 #, no-wrap msgid "B(2)" msgstr "B(2)" #. type: Plain text #: build/C/man7/sched.7:64 msgid "Cause the caller to relinquish the CPU, so that some other thread be executed." msgstr "呼び出し元が CPU の使用権を明け渡して、 他のスレッドが実行できるようにする。" #. type: TP #: build/C/man7/sched.7:64 #, no-wrap msgid "B(2)" msgstr "B(2)" #. type: Plain text #: build/C/man7/sched.7:68 msgid "(Linux-specific) Set the CPU affinity of a specified thread." msgstr "(Linux 固有) 指定されたスレッドの CPU affinity を設定する。" #. type: TP #: build/C/man7/sched.7:68 #, no-wrap msgid "B(2)" msgstr "B(2)" #. type: Plain text #: build/C/man7/sched.7:72 msgid "(Linux-specific) Get the CPU affinity of a specified thread." msgstr "(Linux 固有) 指定されたスレッドの CPU affinity を取得する。" #. type: TP #: build/C/man7/sched.7:72 #, no-wrap msgid "B(2)" msgstr "B(2)" #. type: Plain text #: build/C/man7/sched.7:79 msgid "Set the scheduling policy and parameters of a specified thread. This (Linux-specific) system call provides a superset of the functionality of B(2) and B(2)." msgstr "指定されたスレッドのスケジューリングポリシーとパラメーターを設定する。 この (Linux 固有の) システムコールは B(2) と B(2) の両方の機能を持つ。" #. type: TP #: build/C/man7/sched.7:79 #, no-wrap msgid "B(2)" msgstr "B(2)" #. type: Plain text #: build/C/man7/sched.7:87 msgid "Fetch the scheduling policy and parameters of a specified thread. This (Linux-specific) system call provides a superset of the functionality of B(2) and B(2)." msgstr "指定されたスレッドのスケジューリングポリシーとパラメーターを取得する。 この (Linux 固有の) システムコールは B(2) と B(2) の両方の機能を持つ。" #. type: SS #: build/C/man7/sched.7:87 #, no-wrap msgid "Scheduling policies" msgstr "スケジューリングポリシー (scheduling policy)" #. type: Plain text #: build/C/man7/sched.7:95 msgid "The scheduler is the kernel component that decides which runnable thread will be executed by the CPU next. Each thread has an associated scheduling policy and a I scheduling priority, I. The scheduler makes its decisions based on knowledge of the scheduling policy and static priority of all threads on the system." msgstr "スケジューラ (scheduler) とはカーネルの構成要素で、 次に CPU で実行される実行可能なスレッドを決定するものである。 各々のスレッドには、スケジューリングポリシーと 「静的」なスケジューリング優先度 I が対応付けられる。 スケジューラは、システム上の全スレッドのスケジューリングポリシーと 静的優先度に関する知識に基づいて決定を行う。" #. type: Plain text #: build/C/man7/sched.7:100 msgid "For threads scheduled under one of the normal scheduling policies (B, B, B), I is not used in scheduling decisions (it must be specified as 0)." msgstr "通常のスケジューリングポリシー (B, B, B) の下でスケジューリングされるスレッドでは、 I はスケジューリングの決定に使用されない (I には 0 を指定しなければならない)。" #. type: Plain text #: build/C/man7/sched.7:114 msgid "Processes scheduled under one of the real-time policies (B, B) have a I value in the range 1 (low) to 99 (high). (As the numbers imply, real-time threads always have higher priority than normal threads.) Note well: POSIX.1-2001 requires an implementation to support only a minimum 32 distinct priority levels for the real-time policies, and some systems supply just this minimum. Portable programs should use B(2) and B(2) to find the range of priorities supported for a particular policy." msgstr "リアルタイムスケジューリングポリシー (B, B) の下でスケジューリングされるスレッドは、 I の値は 1 (最低) から 99 (最高) の範囲となる (数字から分かるように、リアルタイムスレッドは常に通常のスレッドよりも 高い優先度を持つ)。 ここで注意すべきなのは、POSIX.1-2001 が要求しているのは、 リアルタイムポリシーの実装において最低 32 種類の異なる優先度レベルが サポートされることだけであり、いくつかのシステムではこの最低限の数の 優先度しか提供されていない、ということである。 移植性が必要なプログラムでは、 B(2) と B(2) を使って、あるポリシーがサポートする優先度の範囲を調べるべきである。" #. type: Plain text #: build/C/man7/sched.7:120 msgid "Conceptually, the scheduler maintains a list of runnable threads for each possible I value. In order to determine which thread runs next, the scheduler looks for the nonempty list with the highest static priority and selects the thread at the head of this list." msgstr "概念としては、 スケジューラはその I の値それぞれに対して 実行可能なスレッドのリストを管理している。 どのスレッドを次に実行するかを決定するために、 スケジューラは静的優先度の最も高い空でないリストを探して、 そのリストの先頭のスレッドを選択する。" #. type: Plain text #: build/C/man7/sched.7:124 msgid "A thread's scheduling policy determines where it will be inserted into the list of threads with equal static priority and how it will move inside this list." msgstr "各スレッドのスケジューリングポリシーは、 そのスレッドが同じ静的優先度を持つスレッドのリストの中のどこに挿入され、 このリストの中をどのように移動するかを決定する。" #. type: Plain text #: build/C/man7/sched.7:132 msgid "All scheduling is preemptive: if a thread with a higher static priority becomes ready to run, the currently running thread will be preempted and returned to the wait list for its static priority level. The scheduling policy determines the ordering only within the list of runnable threads with equal static priority." msgstr "全てのスケジューリングはプリエンプティブ (preemptive) である: より高い優先度のスレッドが実行可能になると、現在実行中のスレッドは実行権を 取り上げられ (preempted)、そのスレッドの静的優先度レベルの待ちリストに 戻される。スケジューリングポリシーは同じ静的優先度を持つ実行可能な スレッドのリストの中で順番のみを決定する。" #. type: SS #: build/C/man7/sched.7:132 #, no-wrap msgid "SCHED_FIFO: First in-first out scheduling" msgstr "SCHED_FIFO: ファーストインファーストアウトスケジューリング" #. type: Plain text #: build/C/man7/sched.7:141 msgid "B can be used only with static priorities higher than 0, which means that when a B threads becomes runnable, it will always immediately preempt any currently running B, B, or B thread. B is a simple scheduling algorithm without time slicing. For threads scheduled under the B policy, the following rules apply:" msgstr "B は 0 より大きな静的優先度でのみ使用できる。このポリシーでは、 B スレッドが実行可能になった場合、 そのポリシーが B、 B、 B の 現在実行中のスレッドは直ちに実行権を取り上げられる。 B は時分割のない単純なスケジューリングアルゴリズムである。 B ポリシーでスケジューリングされているスレッドには以下の ルールが適用される:" #. type: IP #: build/C/man7/sched.7:141 build/C/man7/sched.7:146 build/C/man7/sched.7:149 #: build/C/man7/sched.7:164 build/C/man7/sched.7:412 build/C/man7/sched.7:421 #: build/C/man7/sched.7:444 build/C/man7/sched.7:452 build/C/man7/sched.7:491 #: build/C/man7/sched.7:499 build/C/man7/sched.7:504 build/C/man7/sched.7:509 #, no-wrap msgid "*" msgstr "*" #. type: Plain text #: build/C/man7/sched.7:146 msgid "A B thread that has been preempted by another thread of higher priority will stay at the head of the list for its priority and will resume execution as soon as all threads of higher priority are blocked again." msgstr "より高い優先度の他のスレッドによって取って代わられた B スレッドはその優先度のリストの先頭に留まり続け、 より高い優先度のスレッド全てが停止 (block) した場合に実行を再開する。" #. type: Plain text #: build/C/man7/sched.7:149 msgid "When a B thread becomes runnable, it will be inserted at the end of the list for its priority." msgstr "B スレッドが実行可能になった時、その優先度のリストの最後 に挿入される。" #. In 2.2.x and 2.4.x, the thread is placed at the front of the queue #. In 2.0.x, the Right Thing happened: the thread went to the back -- MTK #. type: Plain text #: build/C/man7/sched.7:164 msgid "A call to B(2), B(2), or B(2) will put the B (or B) thread identified by I at the start of the list if it was runnable. As a consequence, it may preempt the currently running thread if it has the same priority. (POSIX.1-2001 specifies that the thread should go to the end of the list.)" msgstr "B(2), B(2), B(2) は I で指定された B (または B) スレッドが 実行可能な場合、リストの最初に置く。 結果として、もし優先度が同じだった場合、 現在実行中のスレッドに先んじるかもしれない。 (POSIX.1-2001 ではスレッドはリストの最後に行くべきと規定されている。)" #. type: Plain text #: build/C/man7/sched.7:168 msgid "A thread calling B(2) will be put at the end of the list." msgstr "B(2) を呼び出したスレッドはリストの最後に置かれる。" #. type: Plain text #: build/C/man7/sched.7:172 msgid "No other events will move a thread scheduled under the B policy in the wait list of runnable threads with equal static priority." msgstr "その他のイベントによって B ポリシーでスケジューリングされるスレッドが同じ優先度の実行可能なスレッドの待ちリストの中を移動することはない。" #. type: Plain text #: build/C/man7/sched.7:177 msgid "A B thread runs until either it is blocked by an I/O request, it is preempted by a higher priority thread, or it calls B(2)." msgstr "B スレッドは I/O 要求によって停止するか、 より高い優先度のスレッドによって置きかえられるか、 B(2) を呼び出すまで実行を続ける。" #. type: SS #: build/C/man7/sched.7:177 #, no-wrap msgid "SCHED_RR: Round-robin scheduling" msgstr "SCHED_RR: ラウンドロビン (round-robin) スケジューリング" #. On Linux 2.4, the length of the RR interval is influenced #. by the process nice value -- MTK #. type: Plain text #: build/C/man7/sched.7:196 msgid "B is a simple enhancement of B. Everything described above for B also applies to B, except that each thread is allowed to run only for a maximum time quantum. If a B thread has been running for a time period equal to or longer than the time quantum, it will be put at the end of the list for its priority. A B thread that has been preempted by a higher priority thread and subsequently resumes execution as a running thread will complete the unexpired portion of its round-robin time quantum. The length of the time quantum can be retrieved using B(2)." msgstr "" "B は B の単純な拡張である。 上述された\n" "B に関する記述は全て B に 適用できる。異なるのは\n" "それぞれのスレッドは最大時間単位までしか実行できない ということである。\n" "B スレッドが時間単位と同じかそれより 長い時間実行されると、\n" "その優先度のリストの最後に置かれる。 より高い優先度のスレッドによって\n" "置きかえられ、その後実行を再開した B スレッドは、そのラウンド\n" "ロビン時間単位を完全に使い切る まで実行される。その時間単位の長さは\n" "B(2) を使って取得できる。" #. type: SS #: build/C/man7/sched.7:196 #, no-wrap msgid "SCHED_DEADLINE: Sporadic task model deadline scheduling" msgstr "SCHED_DEADLINE: 散発タスクモデルのデッドラインスケジューリング" #. type: Plain text #: build/C/man7/sched.7:208 msgid "Since version 3.14, Linux provides a deadline scheduling policy (B). This policy is currently implemented using GEDF (Global Earliest Deadline First) in conjunction with CBS (Constant Bandwidth Server). To set and fetch this policy and associated attributes, one must use the Linux-specific B(2) and B(2) system calls." msgstr "バージョン 3.14 以降では、 Linux はデッドラインスケジューリングポリシー (B) が提供される。 現在のところ、 このポリシーは GEDF (Global Earliest Deadline First) を使って CBS (Constant Bandwidth Server) との組み合わせで実装されている。 このポリシーと関連する属性の設定、取得を行うには、 Linux 固有のシステムコール B(2) と B(2) を使用する必要がある。" #. type: Plain text #: build/C/man7/sched.7:226 msgid "A sporadic task is one that has a sequence of jobs, where each job is activated at most once per period. Each job also has a I, before which it should finish execution, and a I, which is the CPU time necessary for executing the job. The moment when a task wakes up because a new job has to be executed is called the I (also referred to as the request time or release time). The I is the time at which a task starts its execution. The I is thus obtained by adding the relative deadline to the arrival time." msgstr "散発タスク (sporadic task) はジョブ列を持つタスクで、 各ジョブは期間 (period) あたり多くとも 1 回だけ有効化される。 各ジョブには I (相対デッドライン) と I (計算時間) がある。 相対デッドラインは、そのジョブがそのデッドラインより前に実行が終了すべきであることを示す。 計算時間は、このジョブを実行するのに必要な CPU 時間である。 新しいジョブを実行する必要が出てタスクが起こされる時点は I (到着時刻) と呼ばれる (要求時刻 (request time) や解放時刻 (release time) と呼ばれることもある)。 I はタスクが実行を開始する時刻である。 したがって、 I (絶対デッドライン) は到着時刻に相対デッドラインを加算することで求められる。" #. type: Plain text #: build/C/man7/sched.7:228 msgid "The following diagram clarifies these terms:" msgstr "以下の図はこれらの用語をまとめたものである。" #. type: Plain text #: build/C/man7/sched.7:239 #, no-wrap msgid "" "arrival/wakeup absolute deadline\n" " | start time |\n" " | | |\n" " v v v\n" "-----x--------xooooooooooooooooo--------x--------x---\n" " |E- comp. time -E|\n" " |E------- relative deadline ------E|\n" " |E-------------- period -------------------E|\n" msgstr "" "arrival/wakeup absolute deadline\n" " | start time |\n" " | | |\n" " v v v\n" "-----x--------xooooooooooooooooo--------x--------x---\n" " |E- comp. time -E|\n" " |E------- relative deadline ------E|\n" " |E-------------- period -------------------E|\n" #. type: Plain text #: build/C/man7/sched.7:258 msgid "When setting a B policy for a thread using B(2), one can specify three parameters: I, I, and I. These parameters do not necessarily correspond to the aforementioned terms: usual practice is to set Runtime to something bigger than the average computation time (or worst-case execution time for hard real-time tasks), Deadline to the relative deadline, and Period to the period of the task. Thus, for B scheduling, we have:" msgstr "B(2) を使ってスレッドに B ポリシーを設定する際、 I, I, I の 3 つのパラメーターを指定することができる。 これらのパラメーターは必ずしも上で述べた用語に対応しているわけではない。 よくある方法としては、 Runtime に平均計算時間 (もしくはハードリアルタイムタスクの場合は最悪ケースの実行時間) よりも大きな値を、 Deadline に相対デッドラインを、 Period にタスクの期間 (period) を設定する。 したがって、 B スケジューリングでは、 以下のようになる。" #. type: Plain text #: build/C/man7/sched.7:269 #, no-wrap msgid "" "arrival/wakeup absolute deadline\n" " | start time |\n" " | | |\n" " v v v\n" "-----x--------xooooooooooooooooo--------x--------x---\n" " |E-- Runtime -------E|\n" " |E----------- Deadline -----------E|\n" " |E-------------- Period -------------------E|\n" msgstr "" "arrival/wakeup absolute deadline\n" " | start time |\n" " | | |\n" " v v v\n" "-----x--------xooooooooooooooooo--------x--------x---\n" " |E-- Runtime -------E|\n" " |E----------- Deadline -----------E|\n" " |E-------------- Period -------------------E|\n" #. FIXME It looks as though specifying sched_period as 0 means #. "make sched_period the same as sched_deadline". #. This needs to be documented. #. type: Plain text #: build/C/man7/sched.7:289 msgid "The three deadline-scheduling parameters correspond to the I, I, and I fields of the I structure; see B(2). These fields express value in nanoseconds. If I is specified as 0, then it is made the same as I." msgstr "3 つのデッドラインスケジューリングパラメーターは I 構造体の I, I, I フィールドに対応する。 これらのフィールドはナノ秒単位の値である。 I に 0 が指定された場合 I と同じ値になる。" #. type: Plain text #: build/C/man7/sched.7:291 msgid "The kernel requires that:" msgstr "カーネルでは以下の関係が成り立つことが求められる。" #. type: Plain text #: build/C/man7/sched.7:293 #, no-wrap msgid " sched_runtime E= sched_deadline E= sched_period\n" msgstr " sched_runtime E= sched_deadline E= sched_period\n" #. See __checkparam_dl in kernel/sched/core.c #. type: Plain text #: build/C/man7/sched.7:303 msgid "In addition, under the current implementation, all of the parameter values must be at least 1024 (i.e., just over one microsecond, which is the resolution of the implementation), and less than 2^63. If any of these checks fails, B(2) fails with the error B." msgstr "これに加えて、 現在の実装では、 すべてのパラメーター値は少なくとも 1024 (実装の粒度である 1 マイクロ秒よりも少しだけ大きな値) で 2^63 よりも小さくなければならない。 これらのチェックのいずれかが失敗すると、 B(2) はエラー B で失敗する。" #. type: Plain text #: build/C/man7/sched.7:306 msgid "The CBS guarantees non-interference between tasks, by throttling threads that attempt to over-run their specified Runtime." msgstr "CBS によりタスク間の干渉がないことが保証される。 指定された Runtime を超えて実行しようとしたスレッドは絞り込まれることになる。" #. type: Plain text #: build/C/man7/sched.7:319 msgid "To ensure deadline scheduling guarantees, the kernel must prevent situations where the set of B threads is not feasible (schedulable) within the given constraints. The kernel thus performs an admittance test when setting or changing B policy and attributes. This admission test calculates whether the change is feasible; if it is not B(2) fails with the error B." msgstr "デッドラインスケジューリングの保証がきちんと機能するためには、 カーネルは B スレッドの集合が指定された制約条件におさまらない (スケジューリングできない) 状況を防止しなければならない。 そのため、カーネルは B ポリシーと属性を設定、変更する際に、受け入れチェック (admittance test) を実行する。 この受け入れチェックは、変更が実行可能かを計算し、もし実行できないようであれば B(2) はエラー B で失敗する。" #. type: Plain text #: build/C/man7/sched.7:325 msgid "For example, it is required (but not necessarily sufficient) for the total utilization to be less than or equal to the total number of CPUs available, where, since each thread can maximally run for Runtime per Period, that thread's utilization is its Runtime divided by its Period." msgstr "例えば、 使用率の合計が利用可能な合計 CPU 数以下である必要がある (ただし、必ずしも十分というわけではない)。 なお、 各スレッドは最大で Period あたり Runtime だけ実行されることがあるので、 そのスレッドの使用率は Runtime を Period で割ったものとなる。" #. type: Plain text #: build/C/man7/sched.7:336 msgid "In order to fulfil the guarantees that are made when a thread is admitted to the B policy, B threads are the highest priority (user controllable) threads in the system; if any B thread is runnable, it will preempt any thread scheduled under one of the other policies." msgstr "スレッドが B ポリシーに受け入れられた場合に保証を実現するため、 B スレッドはシステムで (ユーザーが制御可能な) 最高優先度のスレッドとなる。 いずれかの B スレッドが実行可能であれば、 他のポリシーでスケジューリングされているスレッドはすべて横取りされる。" #. type: Plain text #: build/C/man7/sched.7:344 msgid "A call to B(2) by a thread scheduled under the B policy will fail with the error B, unless the thread has its reset-on-fork flag set (see below)." msgstr "B ポリシーでスケジューリングされているスレッドが B(2) を呼び出すと、 そのスレッドで reset-on-fork フラグがセットされている場合 (下記参照) を除き、 エラー B で失敗する。" # #. FIXME Calling sched_getparam() on a SCHED_DEADLINE thread #. fails with EINVAL, but sched_getscheduler() succeeds. #. Is that intended? (Why?) #. type: Plain text #: build/C/man7/sched.7:355 msgid "A B thread that calls B(2) will yield the current job and wait for a new period to begin." msgstr "B スレッドが B(2) を呼び出すと、 現在のジョブが CPU を明け渡し、新しい期間が開始するのを待つ。" #. type: SS #: build/C/man7/sched.7:355 #, no-wrap msgid "SCHED_OTHER: Default Linux time-sharing scheduling" msgstr "SCHED_OTHER: Linux のデフォルトの時分割スケジューリング" #. type: Plain text #: build/C/man7/sched.7:372 msgid "B can be used at only static priority 0. B is the standard Linux time-sharing scheduler that is intended for all threads that do not require the special real-time mechanisms. The thread to run is chosen from the static priority 0 list based on a I priority that is determined only inside this list. The dynamic priority is based on the nice value (set by B(2), B(2), or B(2)) and increased for each time quantum the thread is ready to run, but denied to run by the scheduler. This ensures fair progress among all B threads." msgstr "B は静的優先度 0 でのみ使用できる。 B は Linux 標準の時分割スケジューラで、 特別なリアルタイム機構を必要としていない全てのスレッドで使用される。 実行するスレッドは、静的優先度 0 のリストから、このリストの中だけで 決定される「動的な」優先度 (dynamic priority) に基いて決定される。 動的な優先度は (B(2), B(2), B(2) により設定される) nice 値に基づいて決定されるもので、 単位時間毎に、スレッドが実行可能だが、スケジューラにより実行が拒否された 場合にインクリメントされる。 これにより、全ての B スレッドでの公平性が保証される。" #. type: SS #: build/C/man7/sched.7:372 #, no-wrap msgid "SCHED_BATCH: Scheduling batch processes" msgstr "SCHED_BATCH: バッチプロセスのスケジューリング" #. type: Plain text #: build/C/man7/sched.7:384 msgid "(Since Linux 2.6.16.) B can be used only at static priority 0. This policy is similar to B in that it schedules the thread according to its dynamic priority (based on the nice value). The difference is that this policy will cause the scheduler to always assume that the thread is CPU-intensive. Consequently, the scheduler will apply a small scheduling penalty with respect to wakeup behavior, so that this thread is mildly disfavored in scheduling decisions." msgstr "(Linux 2.6.16 以降) B は静的優先度 0 でのみ使用できる。 このポリシーは (nice 値に基づく) 動的な優先度にしたがってスレッドの スケジューリングが行われるという点で、B に似ている。 異なるのは、このポリシーでは、スレッドが常に CPU に負荷のかかる (CPU-intensive) 処理を行うと、スケジューラが仮定する点である。 スケジューラはスレッドを呼び起こす毎にそのスレッドにスケジューリング上の ペナルティを少し課し、その結果、このスレッドはスケジューリングの決定で 若干冷遇されるようになる。" #. The following paragraph is drawn largely from the text that #. accompanied Ingo Molnar's patch for the implementation of #. SCHED_BATCH. #. commit b0a9499c3dd50d333e2aedb7e894873c58da3785 #. type: Plain text #: build/C/man7/sched.7:394 msgid "This policy is useful for workloads that are noninteractive, but do not want to lower their nice value, and for workloads that want a deterministic scheduling policy without interactivity causing extra preemptions (between the workload's tasks)." msgstr "このポリシーは、非対話的な処理だがその nice 値を下げたくない処理や、 (処理のタスク間で) 余計なタスクの置き換えの原因とある対話的な処理なしで 確定的な (deterministic) スケジューリングポリシーを適用したい処理に 対して有効である。" #. type: SS #: build/C/man7/sched.7:394 #, no-wrap msgid "SCHED_IDLE: Scheduling very low priority jobs" msgstr "SCHED_IDLE: 非常に優先度の低いジョブのスケジューリング" #. type: Plain text #: build/C/man7/sched.7:398 msgid "(Since Linux 2.6.23.) B can be used only at static priority 0; the process nice value has no influence for this policy." msgstr "(Linux 2.6.23 以降) B は静的優先度 0 でのみ使用できる。 このポリシーではプロセスの nice 値はスケジューリングに影響を与えない。" #. type: Plain text #: build/C/man7/sched.7:406 msgid "This policy is intended for running jobs at extremely low priority (lower even than a +19 nice value with the B or B policies)." msgstr "非常に低い優先度でのジョブの実行を目的としたものである (非常に低い優先度とは、ポリシー B か B での nice 値 +19 よりさらに低い優先度である)。" #. type: SS #: build/C/man7/sched.7:406 #, no-wrap msgid "Resetting scheduling policy for child processes" msgstr "子プロセスでのスケジューリングポリシーのリセット" #. type: Plain text #: build/C/man7/sched.7:412 msgid "Each thread has a reset-on-fork scheduling flag. When this flag is set, children created by B(2) do not inherit privileged scheduling policies. The reset-on-fork flag can be set by either:" msgstr "各スレッドには reset-on-fork スケジューリングフラグがある。 このフラグがセットされると、 B(2) で作成される子プロセスは特権スケジューリングポリシーを継承しない。 reset-on-fork フラグは以下のいずれかの方法でセットできる。" #. type: Plain text #: build/C/man7/sched.7:421 msgid "ORing the B flag into the I argument when calling B(2) (since Linux 2.6.32); or" msgstr "B(2) を呼び出す際に B フラグを I 引き数に論理和で指定する (Linux 2.6.32 以降)。" #. type: Plain text #: build/C/man7/sched.7:428 msgid "specifying the B flag in I when calling B(2)." msgstr "B(2) を呼び出し際に I に B フラグを指定する。" #. type: Plain text #: build/C/man7/sched.7:434 msgid "Note that the constants used with these two APIs have different names. The state of the reset-on-fork flag can analogously be retrieved using B(2) and B(2)." msgstr "これらの 2 つの API で使用される定数は名前が違っている点に注意すること。 同様に reset-on-fork フラグの状態は B(2) と B(2) を使って取得できる。" #. type: Plain text #: build/C/man7/sched.7:441 msgid "The reset-on-fork feature is intended for media-playback applications, and can be used to prevent applications evading the B resource limit (see B(2)) by creating multiple child processes." msgstr "reset-on-fork 機能はメディア再生アプリケーションでの利用を意図したものである。 複数の子プロセスを作成することで、 アプリケーションは B リソース上限 (B(2) を参照) を避けることができる。" #. type: Plain text #: build/C/man7/sched.7:444 msgid "More precisely, if the reset-on-fork flag is set, the following rules apply for subsequently created children:" msgstr "より正確には、 reset-on-fork フラグがセットされた場合、それ以降に作成される子プロセスに以下のルールが適用される。" #. type: Plain text #: build/C/man7/sched.7:452 msgid "If the calling thread has a scheduling policy of B or B, the policy is reset to B in child processes." msgstr "呼び出したスレッドのスケジューリングポリシーが B か B の場合、子プロセスのポリシーは B にリセットされる。" #. type: Plain text #: build/C/man7/sched.7:455 msgid "If the calling process has a negative nice value, the nice value is reset to zero in child processes." msgstr "子プロセスが負の nice 値を持っている場合、子プロセスの nice 値は 0 にリセットされる。" #. type: Plain text #: build/C/man7/sched.7:463 msgid "After the reset-on-fork flag has been enabled, it can be reset only if the thread has the B capability. This flag is disabled in child processes created by B(2)." msgstr "一度 reset-on-fork フラグが有効にされた後は、このフラグをリセットできるのは、スレッドが B ケーパビリティを持つ場合だけである。このフラグは B(2) で作成された子プロセスでは無効になる。" #. type: SS #: build/C/man7/sched.7:463 #, no-wrap msgid "Privileges and resource limits" msgstr "特権とリソース制限" #. type: Plain text #: build/C/man7/sched.7:475 msgid "In Linux kernels before 2.6.12, only privileged (B) threads can set a nonzero static priority (i.e., set a real-time scheduling policy). The only change that an unprivileged thread can make is to set the B policy, and this can be done only if the effective user ID of the caller matches the real or effective user ID of the target thread (i.e., the thread specified by I) whose policy is being changed." msgstr "2.6.12 より前のバージョンの Linux カーネルでは、 特権スレッド (B ケーパビリティを持つスレッド) だけが 0 以外の静的優先度を設定する (すなわち、リアルタイムスケジューリングポリシーを設定する) ことができる。 非特権スレッドができる変更は B ポリシーを設定することだけであり、さらに、 この変更を行えるのは、 呼び出し元の実効ユーザー ID がポリシーの変更対象スレッド (I で指定されたスレッド) の実ユーザー ID か実効ユーザー ID と 一致する場合だけである。" #. type: Plain text #: build/C/man7/sched.7:481 msgid "A thread must be privileged (B) in order to set or modify a B policy." msgstr "B ポリシーを設定、変更するには、スレッドが特権 (B) を持っていなければならない。" #. type: Plain text #: build/C/man7/sched.7:491 msgid "Since Linux 2.6.12, the B resource limit defines a ceiling on an unprivileged thread's static priority for the B and B policies. The rules for changing scheduling policy and priority are as follows:" msgstr "Linux 2.6.12 以降では、リソース制限 B が定義されており、 スケジューリングポリシーが B と B の場合の、非特権スレッドの静的優先度の上限を定めている。 スケジューリングポリシーと優先度を変更する際のルールは以下の通りである。" #. type: Plain text #: build/C/man7/sched.7:499 msgid "If an unprivileged thread has a nonzero B soft limit, then it can change its scheduling policy and priority, subject to the restriction that the priority cannot be set to a value higher than the maximum of its current priority and its B soft limit." msgstr "非特権スレッドに 0 以外の B ソフトリミットが設定されている場合、 非特権スレッドはそのスレッドのスケジューリングポリシーと優先度を 変更できるが、優先度を現在の自身の優先度と B ソフトリミットの大きい方よりも高い値に設定できないという制限が課される。" #. type: Plain text #: build/C/man7/sched.7:504 msgid "If the B soft limit is 0, then the only permitted changes are to lower the priority, or to switch to a non-real-time policy." msgstr "B ソフトリミットが 0 の場合、優先度を下げるか、 リアルタイムでないポリシーへ切り替えるかの変更だけが許可される。" #. type: Plain text #: build/C/man7/sched.7:509 msgid "Subject to the same rules, another unprivileged thread can also make these changes, as long as the effective user ID of the thread making the change matches the real or effective user ID of the target thread." msgstr "ある非特権スレッドが別のスレッドに対してこれらの変更を行う際にも、 同じルールが適用される。変更を行えるのは、変更を行おうとするスレッド の実効ユーザー ID が変更対象のスレッドの実ユーザー ID か実効ユーザー ID と 一致している場合に限られる。" #. commit c02aa73b1d18e43cfd79c2f193b225e84ca497c8 #. type: Plain text #: build/C/man7/sched.7:528 msgid "Special rules apply for the B policy. In Linux kernels before 2.6.39, an unprivileged thread operating under this policy cannot change its policy, regardless of the value of its B resource limit. In Linux kernels since 2.6.39, an unprivileged thread can switch to either the B or the B policy so long as its nice value falls within the range permitted by its B resource limit (see B(2))." msgstr "B ポリシーの場合には特別なルールが適用される。 2.6.39 より前の Linux カーネルでは、このポリシーで動作する非特権スレッドは、 B リソース上限の値に関わらず、自分のポリシーを変更することができない。 2.6.39 以降の Linux カーネルでは、非特権スレッドは、自分の nice 値が B リソース上限 (B(2) 参照) で許可された範囲である限りは、自分のスケジューリングポリシーを B か B ポリシーに切り替えることができる。" #. type: Plain text #: build/C/man7/sched.7:539 msgid "Privileged (B) threads ignore the B limit; as with older kernels, they can make arbitrary changes to scheduling policy and priority. See B(2) for further information on B." msgstr "特権スレッド (B ケーパビリティを持つスレッド) の場合、 B の制限は無視される; 古いカーネルと同じように、スケジューリングポリシーと優先度に対し 任意の変更を行うことができる。 B に関するもっと詳しい情報は B(2) を参照のこと。" #. type: SS #: build/C/man7/sched.7:539 #, no-wrap msgid "Limiting the CPU usage of real-time and deadline processes" msgstr "リアルタイムプロセスとデッドラインプロセスの CPU 使用量を制限する" #. type: Plain text #: build/C/man7/sched.7:552 msgid "A nonblocking infinite loop in a thread scheduled under the B, B, or B policy will block all threads with lower priority forever. Prior to Linux 2.6.25, the only way of preventing a runaway real-time process from freezing the system was to run (at the console) a shell scheduled under a higher static priority than the tested application. This allows an emergency kill of tested real-time applications that do not block or terminate as expected." msgstr "B, B, B でスケジューリングされる スレッドが停止せずに無限ループに陥ると、 他の全てのより低い優先度のスレッドを永久に停止 (block) させてしまう。 Linux 2.6.25 より前では、 リアルタイムプロセスが暴走してしまい、システムが止まってしまうのを防止する唯一の方法は、 (コンソールで) シェルをテスト対象のアプリケーションよりも高い静的優先度で実行することだけであった。 これによって期待通りに停止したり終了したりしないリアルタイム アプリケーションを緊急終了させることが可能になる。" #. type: Plain text #: build/C/man7/sched.7:562 msgid "Since Linux 2.6.25, there are other techniques for dealing with runaway real-time and deadline processes. One of these is to use the B resource limit to set a ceiling on the CPU time that a real-time process may consume. See B(2) for details." msgstr "Linux 2.6.25 以降では、 暴走したリアルタイムプロセスやデッドラインプロセスを扱う別の方法が提供されている。 一つは B リソース上限を使ってリアルタイムプロセスが消費できる CPU 時間の上限を設定する方法である。 詳細は B(2) を参照。" #. type: Plain text #: build/C/man7/sched.7:570 msgid "Since version 2.6.25, Linux also provides two I files that can be used to reserve a certain amount of CPU time to be used by non-real-time processes. Reserving some CPU time in this fashion allows some CPU time to be allocated to (say) a root shell that can be used to kill a runaway process. Both of these files specify time values in microseconds:" msgstr "Linux 2.6.25 以降では、 2 つの I ファイルを使って、リアルタイムでないプロセスが使用できる CPU 時間を一定量予約することができる。 この方法で CPU 時間をいくらか予約しておくことで、 CPU 時間が (例えば) root シェルに割り当てられ、このシェルから暴走したプロセスを殺すことができる。 これらのファイルでは両方ともマイクロ秒で時間を指定する。" #. type: TP #: build/C/man7/sched.7:570 #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: build/C/man7/sched.7:578 msgid "This file specifies a scheduling period that is equivalent to 100% CPU bandwidth. The value in this file can range from 1 to B, giving an operating range of 1 microsecond to around 35 minutes. The default value in this file is 1,000,000 (1 second)." msgstr "このファイルは、 CPU 時間 100% にあたるスケジューリング間隔を指定する。 このファイルの値として 1 から B を指定できる。 この値は実際の時間としては 1 マイクロ秒から約 35 分に相当する。 このファイルのデフォルト値は 1,000,000 (1 秒) である。" #. type: TP #: build/C/man7/sched.7:578 #, no-wrap msgid "I" msgstr "I" #. type: Plain text #: build/C/man7/sched.7:591 msgid "The value in this file specifies how much of the \"period\" time can be used by all real-time and deadline scheduled processes on the system. The value in this file can range from -1 to B-1. Specifying -1 makes the runtime the same as the period; that is, no CPU time is set aside for non-real-time processes (which was the Linux behavior before kernel 2.6.25). The default value in this file is 950,000 (0.95 seconds), meaning that 5% of the CPU time is reserved for processes that don't run under a real-time or deadline scheduling policy." msgstr "このファイルの値は、 システム上のリアルタイムスケジューリングやデッドラインスケジューリングの全プロセスが使用できる「期間」を指定する。 このファイルの値として -1 から B-1 を指定できる。 -1 を指定すると、実行時間 (runtime) はスケジューリング間隔 (period) と同じになる。 つまり、 CPU 時間はリアルタイムでないプロセスには確保されない (カーネル 2.6.25 より前の Linux の動作である)。 このファイルのデフォルト値は 950,000 (0.95 秒) である。 これは CPU 時間の 5% がリアルタイムやデッドラインスケジューリングポリシー以外で動作するプロセスに確保されるという意味する。" #. type: SS #: build/C/man7/sched.7:592 #, no-wrap msgid "Response time" msgstr "応答時間 (response time)" #. as described in #. .BR request_irq (9). #. type: Plain text #: build/C/man7/sched.7:600 msgid "A blocked high priority thread waiting for I/O has a certain response time before it is scheduled again. The device driver writer can greatly reduce this response time by using a \"slow interrupt\" interrupt handler." msgstr "I/O 待ちで停止したより高い優先度のスレッドは再びスケジューリングされる 前にいくらかの応答時間がかかる。デバイスドライバーを書く場合には \"slow interrupt\" 割り込みハンドラーを使用することで この応答時間を劇的に減少させることができる。" #. type: SS #: build/C/man7/sched.7:600 #, no-wrap msgid "Miscellaneous" msgstr "その他" #. type: Plain text #: build/C/man7/sched.7:605 msgid "Child processes inherit the scheduling policy and parameters across a B(2). The scheduling policy and parameters are preserved across B(2)." msgstr "子プロセスは B(2) の際に親プロセスのスケジューリングポリシーとパラメーターを継承する。 B(2) の前後で、スケジューリングポリシーとパラメーターは保持される。" #. type: Plain text #: build/C/man7/sched.7:611 msgid "Memory locking is usually needed for real-time processes to avoid paging delays; this can be done with B(2) or B(2)." msgstr "リアルタイムプロセスは大抵、ページングの待ち時間を避けるために B(2) や B(2) を使ってメモリロックをしなければならない。" #. type: Plain text #: build/C/man7/sched.7:622 msgid "Originally, Standard Linux was intended as a general-purpose operating system being able to handle background processes, interactive applications, and less demanding real-time applications (applications that need to usually meet timing deadlines). Although the Linux kernel 2.6 allowed for kernel preemption and the newly introduced O(1) scheduler ensures that the time needed to schedule is fixed and deterministic irrespective of the number of active tasks, true real-time computing was not possible up to kernel version 2.6.17." msgstr "もともとは、標準の Linux は一般目的のオペレーティングシステムとして 設計されており、バックグラウンドプロセスや対話的アプリケーション、 リアルタイム性の要求が厳しくないリアルタイムアプリケーション (普通はタイミングの応答期限 (deadline) を満たす必要があるアプリケーション) を扱うことができた。 Linux カーネル 2.6 では、 カーネルのプリエンプション (タスクの置き換え) が可能であり、 新たに導入された O(1) スケジューラにより、 アクティブなタスクの数に関わらずスケジューリングに必要な時間は 固定で確定的 (deterministic) であることが保証されている。 それにも関わらず、カーネル 2.6.17 までは 真のリアルタイムコンピューティングは実現できなかった。" #. type: SS #: build/C/man7/sched.7:622 #, no-wrap msgid "Real-time features in the mainline Linux kernel" msgstr "本流の Linux カーネルでのリアルタイム機能" #. FIXME . Probably this text will need some minor tweaking #. by about the time of 2.6.30; ask Carsten Emde about this then. #. type: Plain text #: build/C/man7/sched.7:636 msgid "From kernel version 2.6.18 onward, however, Linux is gradually becoming equipped with real-time capabilities, most of which are derived from the former I patches developed by Ingo Molnar, Thomas Gleixner, Steven Rostedt, and others. Until the patches have been completely merged into the mainline kernel (this is expected to be around kernel version 2.6.30), they must be installed to achieve the best real-time performance. These patches are named:" msgstr "" "カーネル 2.6.18 から現在まで、 Linux は徐々にリアルタイム機能を備えつつ\n" "あるが、 これらの機能のほとんどは、 Ingo Molnar, Thomas Gleixner,\n" "Steven Rostedt らによって開発された、 以前の I パッチ\n" "からのものである。 これらのパッチが本流のカーネルに完全にマージされるま\n" "では (マージの完了はカーネル 2.6.30 あたりの予定)、 最高のリアルタイム\n" "性能を達成するには realtime-preempt パッチを 組み込まなければならない。\n" "これらのパッチは" #. type: Plain text #: build/C/man7/sched.7:640 #, no-wrap msgid "patch-I-rtI\n" msgstr "patch-I-rtI\n" #. type: Plain text #: build/C/man7/sched.7:646 msgid "and can be downloaded from E<.UR http://www.kernel.org\\:/pub\\:/linux\\:/kernel\\:/projects\\:/rt/> E<.UE .>" msgstr "という名前で、 E<.UR http://www.kernel.org\\:/pub\\:/linux\\:/kernel\\:/projects\\:/rt/> E<.UE> からダウンロードできる。" #. type: Plain text #: build/C/man7/sched.7:655 msgid "Without the patches and prior to their full inclusion into the mainline kernel, the kernel configuration offers only the three preemption classes B, B, and B which respectively provide no, some, and considerable reduction of the worst-case scheduling latency." msgstr "このパッチが適用されず、かつパッチの内容の本流のカーネルへのマージが 完了するまでは、カーネルの設定では B, B, B の 3つのプリエンプションクラス (preemption class) だけが提供される。 これらのクラスでは、最悪の場合のスケジューリング遅延がそれぞれ 全く減らない、いくらか減る、かなり減る。" #. type: Plain text #: build/C/man7/sched.7:664 msgid "With the patches applied or after their full inclusion into the mainline kernel, the additional configuration item B becomes available. If this is selected, Linux is transformed into a regular real-time operating system. The FIFO and RR scheduling policies are then used to run a thread with true real-time priority and a minimum worst-case scheduling latency." msgstr "パッチが適用された場合、またはパッチの内容の本流のカーネルへのマージが 完了した後では、上記に加えて設定項目として B が利用可能になる。この項目を選択すると、 Linux は通常のリアルタイムオペレーティングシステムに変身する。 この場合には、 FIFO と RR のスケジューリングポリシーは、 真のリアルタイム優先度を持つスレッドを最悪の場合のスケジューリング遅延が 最小となる環境で動作させるために使われることになる。" #. type: Plain text #: build/C/man7/sched.7:691 msgid "B(1), B(1), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(3), B(3), B(3), B(7), B(7)" msgstr "B(1), B(1), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(2), B(3), B(3), B(3), B(7), B(7)" #. type: Plain text #: build/C/man7/sched.7:695 msgid "I by Bill O. Gallmeister, O'Reilly & Associates, Inc., ISBN 1-56592-074-0." msgstr "I by Bill O. Gallmeister, O'Reilly & Associates, Inc., ISBN 1-56592-074-0." #. type: Plain text #: build/C/man7/sched.7:702 msgid "The Linux kernel source files I, I, I, and I" msgstr "Linux カーネルソースのファイル I, I, I, I" #. type: TH #: build/C/man2/setns.2:8 #, no-wrap msgid "SETNS" msgstr "SETNS" #. type: TH #: build/C/man2/setns.2:8 #, no-wrap msgid "2015-01-10" msgstr "2015-01-10" #. type: Plain text #: build/C/man2/setns.2:11 msgid "setns - reassociate thread with a namespace" msgstr "setns - スレッドに名前空間を関連付けしなおす" #. type: Plain text #: build/C/man2/setns.2:17 #, no-wrap msgid "BIB<, int >IB<);>\n" msgstr "BIB<, int >IB<);>\n" #. type: Plain text #: build/C/man2/setns.2:21 msgid "Given a file descriptor referring to a namespace, reassociate the calling thread with that namespace." msgstr "" "名前空間を参照するファイルディスクリプターを指定すると、\n" "呼び出したスレッドにその名前空間を関連付けしなおす。" #. type: Plain text #: build/C/man2/setns.2:34 msgid "The I argument is a file descriptor referring to one of the namespace entries in a I directory; see B(7) for further information on I. The calling thread will be reassociated with the corresponding namespace, subject to any constraints imposed by the I argument." msgstr "" "I 引き数は、 I ディレクトリ内の名前空間エントリ\n" "のいずれかを参照するファイルディスクリプターである。\n" "I の詳細は B(7) を参照。\n" "I 引き数で指定された制限の範囲内で、\n" "呼び出したスレッドに I に対応する名前空間を関連付けしなおす。" #. type: Plain text #: build/C/man2/setns.2:40 msgid "The I argument specifies which type of namespace the calling thread may be reassociated with. This argument can have one of the following values:" msgstr "" "I 引き数は、呼び出したスレッドがどのタイプの名前空間を\n" "関連付けしなおすことができるかを指定する。\n" "この引き数には以下のいずれかの値を指定できる。" #. type: TP #: build/C/man2/setns.2:40 #, no-wrap msgid "B<0>" msgstr "B<0>" #. type: Plain text #: build/C/man2/setns.2:43 msgid "Allow any type of namespace to be joined." msgstr "どのタイプの名前空間も関連付けることができる。" #. type: TP #: build/C/man2/setns.2:43 #, no-wrap msgid "B (since Linux 3.0)" msgstr "B (Linux 3.0 以降)" #. type: Plain text #: build/C/man2/setns.2:47 msgid "I must refer to an IPC namespace." msgstr "I は IPC 名前空間を参照していなければならない。" #. type: TP #: build/C/man2/setns.2:47 #, no-wrap msgid "B (since Linux 3.0)" msgstr "B (Linux 3.0 以降)" #. type: Plain text #: build/C/man2/setns.2:51 msgid "I must refer to a network namespace." msgstr "I はネットワーク名前空間を参照していなければならない。" #. type: TP #: build/C/man2/setns.2:51 #, no-wrap msgid "B (since Linux 3.8)" msgstr "B (Linux 3.8 以降)" #. type: Plain text #: build/C/man2/setns.2:55 msgid "I must refer to a mount namespace." msgstr "I はマウント名前空間を参照していなければならない。" #. type: TP #: build/C/man2/setns.2:55 build/C/man2/unshare.2:149 #, no-wrap msgid "B (since Linux 3.8)" msgstr "B (Linux 3.8 以降)" #. type: Plain text #: build/C/man2/setns.2:59 msgid "I must refer to a descendant PID namespace." msgstr "I は子孫の PID 名前空間を参照していなければならない。" #. type: TP #: build/C/man2/setns.2:59 build/C/man2/unshare.2:176 #, no-wrap msgid "B (since Linux 3.8)" msgstr "B (Linux 3.8 以降)" #. type: Plain text #: build/C/man2/setns.2:63 msgid "I must refer to a user namespace." msgstr "I はユーザー名前空間を参照していなければならない。" #. type: TP #: build/C/man2/setns.2:63 #, no-wrap msgid "B (since Linux 3.0)" msgstr "B (Linux 3.0 以降)" #. type: Plain text #: build/C/man2/setns.2:67 msgid "I must refer to a UTS namespace." msgstr "I は UTS 名前空間を参照していなければならない。" #. type: Plain text #: build/C/man2/setns.2:82 msgid "Specifying I as 0 suffices if the caller knows (or does not care) what type of namespace is referred to by I. Specifying a nonzero value for I is useful if the caller does not know what type of namespace is referred to by I and wants to ensure that the namespace is of a particular type. (The caller might not know the type of the namespace referred to by I if the file descriptor was opened by another process and, for example, passed to the caller via a UNIX domain socket.)" msgstr "" "呼び出し側が I がどのタイプの名前空間を参照しているかを知っている\n" "(もしくは気にする必要がない) 場合には、 I に 0 を指定すれば十分\n" "である。呼び出し側が I がどのタイプの名前空間を参照しているかを\n" "知っておらず、かつ、特定のタイプの名前空間であることを保証したい場合、\n" "I に 0 以外の値を指定するとよい。 (ファイルディスクリプターが別の\n" "プロセスによりオープンされ、例えば、UNIX ドメインソケット経由で呼び出し\n" "側に渡された場合などでは、呼び出し側が I がどのタイプの名前空間を\n" "参照しているかを知らない可能性がある。)" #. type: Plain text #: build/C/man2/setns.2:97 msgid "B behaves somewhat differently from the other I values: reassociating the calling thread with a PID namespace only changes the PID namespace that child processes of the caller will be created in; it does not change the PID namespace of the caller itself. Reassociating with a PID namespace is only allowed if the PID namespace specified by I is a descendant (child, grandchild, etc.) of the PID namespace of the caller. For further details on PID namespaces, see B(7)." msgstr "B は他の I 値の場合と少し違った動作をする。 呼び出し元スレッドを PID 名前空間に関連付けし直すと、 呼び出し元の子プロセスが作成される PID 名前空間が変更されるだけである。 呼び出し元自身の PID 名前空間は変更されない。 PID 名前空間を関連付けし直すことができるのは、 I で指定された PID 名前空間が呼び出し元の PID 名前空間の子孫 (子プロセス、孫プロセスなど) の場合だけである。 PID 名前空間の詳細は B(7) を参照。" #. See kernel/user_namespace.c:userns_install() [3.8 source] #. commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71 #. https://lwn.net/Articles/543273/ #. type: Plain text #: build/C/man2/setns.2:124 msgid "A process reassociating itself with a user namespace must have the B capability in the target user namespace. Upon successfully joining a user namespace, a process is granted all capabilities in that namespace, regardless of its user and group IDs. A multithreaded process may not change user namespace with B(). It is not permitted to use B() to reenter the caller's current user namespace. This prevents a caller that has dropped capabilities from regaining those capabilities via a call to B(). For security reasons, a process can't join a new user namespace if it is sharing filesystem-related attributes (the attributes whose sharing is controlled by the B(2) B flag) with another process. For further details on user namespaces, see B(7)." msgstr "プロセスが自分自身をユーザー名前空間に再関連付けするには、 そのプロセスは変更後のユーザー名前空間において B ケーパビリティを持っていなければならない。 ユーザー名前空間への参加に成功すると、 そのユーザー ID やグループ ID に関わらず、 プロセスにはその名前空間におけるすべてのケーパビリティが認められる。 マルチスレッドのプロセスは B() でユーザー名前空間を変更できない。 B() を使って、呼び出し元が現在のユーザー名前空間に再度入ることは認められていない。 これにより、 いくつかのケーパビリティを外した呼び出し元が B() を呼び出すことでそれらのケーパビリティを再度得ることを防ぐことができる。 セキュリティ上の理由から、 ファイルシステム関連の属性 (共有が B(2) B フラグで制御される属性) を別のプロセスと共有している場合、 プロセスは新しいユーザー名前空間に参加できない。 ユーザー名前空間の詳細は B(7) を参照。" #. Above check is in fs/namespace.c:mntns_install() [3.8 source] #. type: Plain text #: build/C/man2/setns.2:138 msgid "A process may not be reassociated with a new mount namespace if it is multithreaded. Changing the mount namespace requires that the caller possess both B and B capabilities in its own user namespace and B in the target mount namespace. See B(7) for details on the interaction of user namespaces and mount namespaces." msgstr "プロセスがマルチスレッドの場合、そのプロセスを新しいマウント名前空間に関連付けし直すことは許可されていない。 マウント名前空間を変更するには、呼び出し元のプロセスが、 自分自身のユーザー名前空間において B と B の両方のケーパビリティを持っており、 変更後のマウント名前空間で B ケーパビリティを持っていなければならない。 ユーザー名前空間とマウント名前空間の関係の詳細は B(7) を参照。" #. type: Plain text #: build/C/man2/setns.2:145 msgid "On success, B() returns 0. On failure, -1 is returned and I is set to indicate the error." msgstr "成功すると B() は 0 を返す。 失敗すると、 -1 が返され、 I にエラーを示す値が設定される。" #. type: Plain text #: build/C/man2/setns.2:150 msgid "I is not a valid file descriptor." msgstr "I が有効なファイルディスクリプターではない。" #. type: Plain text #: build/C/man2/setns.2:155 msgid "I refers to a namespace whose type does not match that specified in I." msgstr "I が I で指定されたタイプと一致しない名前空間を参照している。" #. type: Plain text #: build/C/man2/setns.2:159 msgid "There is problem with reassociating the thread with the specified namespace." msgstr "スレッドを指定された名前空間に関連付けし直す際に問題が発生した。" #. type: Plain text #: build/C/man2/setns.2:164 msgid "The caller tried to join an ancestor (parent, grandparent, etc...) pid namespace." msgstr "呼び出し元が先祖 (親や親の親など) の PID 名前空間に参加しようとした。" #. type: Plain text #: build/C/man2/setns.2:168 msgid "The caller attempted to join the user namespace in which it is already a member." msgstr "自分がすでにメンバーとなっているユーザー名前空間に参加しようとした。" #. commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71 #. type: Plain text #: build/C/man2/setns.2:175 msgid "The caller shares filesystem (B) state (in particular, the root directory) with other processes and tried to join a new user namespace." msgstr "呼び出し元が他のプロセスとファイルシステム状態 (特に root ディレクトリ) を共有していて (B)、 新しいユーザー名前空間に参加しようとした。" #. See kernel/user_namespace.c::userns_install() [kernel 3.15 sources] #. type: Plain text #: build/C/man2/setns.2:179 msgid "The caller is multithreaded and tried to join a new user namespace." msgstr "呼び出し元プロセスがマルチスレッドで、新しいユーザー名前空間に参加しようとした。" #. type: Plain text #: build/C/man2/setns.2:182 msgid "Cannot allocate sufficient memory to change the specified namespace." msgstr "指定された名前空間に変更するのに必要なメモリが割り当てられない。" #. type: Plain text #: build/C/man2/setns.2:186 msgid "The calling thread did not have the required capability for this operation." msgstr "呼び出し元スレッドはこの操作を行うのに必要なケーパビリティを持っていなかった。" #. type: Plain text #: build/C/man2/setns.2:191 msgid "The B() system call first appeared in Linux in kernel 3.0; library support was added to glibc in version 2.14." msgstr "" "B() システムコールはカーネル 3.0 で Linux に初めて登場した。\n" "ライブラリによるサポートは glibc バージョン 2.14 を追加された。" #. type: Plain text #: build/C/man2/setns.2:195 msgid "The B() system call is Linux-specific." msgstr "B() システムコールは Linux 固有である。" #. type: Plain text #: build/C/man2/setns.2:201 msgid "Not all of the attributes that can be shared when a new thread is created using B(2) can be changed using B()." msgstr "" "新しいスレッドが B(2) を使って作成された際に共有できる全ての属性を、\n" "B() を使って変更できるわけではない。" #. type: Plain text #: build/C/man2/setns.2:210 msgid "The program below takes two or more arguments. The first argument specifies the pathname of a namespace file in an existing I directory. The remaining arguments specify a command and its arguments. The program opens the namespace file, joins that namespace using B(), and executes the specified command inside that namespace." msgstr "以下のプログラムは 2 つ以上の引き数を取る。 最初の引き数には、 既存の I ディレクトリの名前空間ファイルのパス名を指定する。 残りの引き数は、コマンドとその引き数を指定する。 このプログラムは名前空間ファイルをオープンし、 B() を使って名前空間に参加し、 指定されたコマンドをその名前空間内で実行する。" #. type: Plain text #: build/C/man2/setns.2:220 msgid "The following shell session demonstrates the use of this program (compiled as a binary named I) in conjunction with the B example program in the B(2) man page (complied as a binary named I)." msgstr "以下のシェルセッションでは、 このプログラム (I という名前のバイナリとしてコンパイルされている)を、 B(2) のマニュアルページの B のサンプルプログラムと組み合わせて使っている。" #. type: Plain text #: build/C/man2/setns.2:228 msgid "We begin by executing the example program in B(2) in the background. That program creates a child in a separate UTS namespace. The child changes the hostname in its namespace, and then both processes display the hostnames in their UTS namespaces, so that we can see that they are different." msgstr "まず、 B(2) のサンプルプログラムをバックグラウンドで実行する。 このプログラムは、 別の UTS 名前空間で子プロセスを作成する。 子プロセスは自分の名前空間内でホスト名を変更する。 それから、 親プロセスと子プロセスの両方でそれぞれの UTS 名前空間のホスト名を表示し、 2 つのホスト名が違うことが確認できる。" #. type: Plain text #: build/C/man2/setns.2:240 #, no-wrap msgid "" "$ B # Need privilege for namespace operations\n" "Password:\n" "# B<./newuts bizarro &>\n" "[1] 3549\n" "clone() returned 3550\n" "uts.nodename in child: bizarro\n" "uts.nodename in parent: antero\n" "# B # Verify hostname in the shell\n" "antero\n" msgstr "" "$ B # 名前空間の操作には特権が必要\n" "Password:\n" "# B<./newuts bizarro &>\n" "[1] 3549\n" "clone() returned 3550\n" "uts.nodename in child: bizarro\n" "uts.nodename in parent: antero\n" "# B # シェルでホスト名を確認\n" "antero\n" #. type: Plain text #: build/C/man2/setns.2:247 msgid "We then run the program shown below, using it to execute a shell. Inside that shell, we verify that the hostname is the one set by the child created by the first program:" msgstr "次に、以下のプログラムを使ってシェルを実行する。 このシェルの中では、ホスト名が最初のプログラムで作成された子プロセスが設定したホスト名になっていることを確認できる。" #. type: Plain text #: build/C/man2/setns.2:253 #, no-wrap msgid "" "# B<./ns_exec /proc/3550/ns/uts /bin/bash>\n" "# B # Executed in shell started by ns_exec\n" "bizarro\n" msgstr "" "# B<./ns_exec /proc/3550/ns/uts /bin/bash>\n" "# B # ns_exec で起動されたシェル内で実行\n" "bizarro\n" #. type: Plain text #: build/C/man2/setns.2:263 #, no-wrap msgid "" "#define _GNU_SOURCE\n" "#include Efcntl.hE\n" "#include Esched.hE\n" "#include Eunistd.hE\n" "#include Estdlib.hE\n" "#include Estdio.hE\n" msgstr "" "#define _GNU_SOURCE\n" "#include Efcntl.hE\n" "#include Esched.hE\n" "#include Eunistd.hE\n" "#include Estdlib.hE\n" "#include Estdio.hE\n" #. type: Plain text #: build/C/man2/setns.2:271 #, no-wrap msgid "" "int\n" "main(int argc, char *argv[])\n" "{\n" " int fd;\n" msgstr "" "int\n" "main(int argc, char *argv[])\n" "{\n" " int fd;\n" #. type: Plain text #: build/C/man2/setns.2:276 #, no-wrap msgid "" " if (argc E 3) {\n" " fprintf(stderr, \"%s /proc/PID/ns/FILE cmd args...\\en\", argv[0]);\n" " exit(EXIT_FAILURE);\n" " }\n" msgstr "" " if (argc E 3) {\n" " fprintf(stderr, \"%s /proc/PID/ns/FILE cmd args...\\en\", argv[0]);\n" " exit(EXIT_FAILURE);\n" " }\n" #. type: Plain text #: build/C/man2/setns.2:280 #, no-wrap msgid "" " fd = open(argv[1], O_RDONLY); /* Get descriptor for namespace */\n" " if (fd == -1)\n" " errExit(\"open\");\n" msgstr "" " fd = open(argv[1], O_RDONLY); /* 名前空間のディスクリプターを取得 */\n" " if (fd == -1)\n" " errExit(\"open\");\n" #. type: Plain text #: build/C/man2/setns.2:283 #, no-wrap msgid "" " if (setns(fd, 0) == -1) /* Join that namespace */\n" " errExit(\"setns\");\n" msgstr "" " if (setns(fd, 0) == -1) /* 名前空間に参加 */\n" " errExit(\"setns\");\n" #. type: Plain text #: build/C/man2/setns.2:287 #, no-wrap msgid "" " execvp(argv[2], &argv[2]); /* Execute a command in namespace */\n" " errExit(\"execvp\");\n" "}\n" msgstr "" " execvp(argv[2], &argv[2]); /* 名前空間内でコマンドを実行 */\n" " errExit(\"execvp\");\n" "}\n" #. type: Plain text #: build/C/man2/setns.2:295 msgid "B(2), B(2), B(2), B(2), B(7), B(7)" msgstr "B(2), B(2), B(2), B(2), B(7), B(7)" #. type: TH #: build/C/man2/unshare.2:20 #, no-wrap msgid "UNSHARE" msgstr "UNSHARE" #. type: Plain text #: build/C/man2/unshare.2:23 msgid "unshare - disassociate parts of the process execution context" msgstr "unshare - プロセス実行コンテキストの一部を分離する" #. type: Plain text #: build/C/man2/unshare.2:28 #, no-wrap msgid "BIB<);>\n" msgstr "BIB<);>\n" #. type: Plain text #: build/C/man2/unshare.2:36 msgid "B():" msgstr "B():" #. type: Plain text #: build/C/man2/unshare.2:62 msgid "B() allows a process to disassociate parts of its execution context that are currently being shared with other processes. Part of the execution context, such as the mount namespace, is shared implicitly when a new process is created using B(2) or B(2), while other parts, such as virtual memory, may be shared by explicit request when creating a process using B(2)." msgstr "B() を使うと、プロセスは他のプロセスと現在共有している 実行コンテキストの一部を分離することができる。 実行コンテキストの一部、たとえばマウント名前空間 (mount namespace) などは、新しいプロセスを B(2) または B(2) を使って生成したときに、暗黙のうちに共有される。 一方、仮想メモリなどは、 B(2) を使ってプロセスを生成するときに、明示的に共有することを要求できる。" #. type: Plain text #: build/C/man2/unshare.2:67 msgid "The main use of B() is to allow a process to control its shared execution context without creating a new process." msgstr "B() の主な利用法は、プロセスが新しいプロセスを生成することなく、 共有実行コンテキストを制御することである。" #. type: Plain text #: build/C/man2/unshare.2:74 msgid "The I argument is a bit mask that specifies which parts of the execution context should be unshared. This argument is specified by ORing together zero or more of the following constants:" msgstr "I 引き数はビットマスクであり、 実行コンテキストのどの部分の共有を解除するかを表す。 この引き数は、以下の定数の 0 個以上の OR で指定する:" #. type: TP #: build/C/man2/unshare.2:74 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/unshare.2:82 msgid "Reverse the effect of the B(2) B flag. Unshare the file descriptor table, so that the calling process no longer shares its file descriptors with any other process." msgstr "B(2) B フラグの効果を取り消す。 ファイルディスクリプターテーブルを共有させず、 呼び出し元プロセスは他のプロセスとファイルディスクリプターを共有しなくなる。" #. type: TP #: build/C/man2/unshare.2:82 #, no-wrap msgid "B" msgstr "B" #. type: Plain text #: build/C/man2/unshare.2:96 msgid "Reverse the effect of the B(2) B flag. Unshare filesystem attributes, so that the calling process no longer shares its root directory (B(2)), current directory (B(2)), or umask (B(2)) attributes with any other process." msgstr "B(2) B フラグの効果を取り消す。ファイルシステム属性を共有させず、呼び出し元プロセスは、ルートディレクトリ (B(2))、カレントディレクトリ (B(2))、 umask (B(2)) を他のプロセスと共有しなくなる。" #. type: Plain text #: build/C/man2/unshare.2:113 msgid "This flag has the same effect as the B(2) B flag. Unshare the System\\ V IPC namespace, so that the calling process has a private copy of the System\\ V IPC namespace which is not shared with any other process. Specifying this flag automatically implies B as well. Use of B requires the B capability." msgstr "" "このフラグは B(2) B フラグと同じ効果を持つ。\n" "System\\ V IPC 名前空間を共有せず、呼び出し元プロセスは 他のプロセスとは\n" "共有しない固有の System\\ V IPC 名前空間のコピーを持つ。 このフラグを指定\n" "すると、 B も暗黙のうちに指定される。 B を\n" "使用するには B ケーパビリティが必要である。" #. type: Plain text #: build/C/man2/unshare.2:128 msgid "This flag has the same effect as the B(2) B 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 B requires the B capability." msgstr "" "このフラグは B(2) B フラグと同じ効果を持つ。ネット\n" "ワーク名前空間を共有せず、呼び出し元プロセスは他のプロセスとは共有しな\n" "い固有のネットワーク名前空間のコピーを持つ。B を使用する\n" "には B ケーパビリティが必要である。" #. type: TP #: build/C/man2/unshare.2:128 #, no-wrap msgid "B" msgstr "B" #. 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. #. type: Plain text #: build/C/man2/unshare.2:149 msgid "This flag has the same effect as the B(2) B flag. Unshare the mount namespace, so that the calling process has a private copy of its namespace which is not shared with any other process. Specifying this flag automatically implies B as well. Use of B requires the B capability." msgstr "" "このフラグは B(2) B フラグと同じ効果を持つ。 マウン\n" "ト名前空間を共有せず、呼び出し元プロセスは 他のプロセスとは共有しない固\n" "有の名前空間のコピーを持つ。 このフラグを指定すると、 B も暗\n" "黙のうちに指定される。 B を使用するには B\n" "ケーパビリティが必要である。" #. type: Plain text #: build/C/man2/unshare.2:176 msgid "This flag has the same effect as the B(2) B flag. Unshare the PID namespace, so that the calling process has a new PID namespace for its children which is not shared with any previously existing process. The calling process is I moved into the new namespace. The first child created by the calling process will have the process ID 1 and will assume the role of B(1) in the new namespace. B automatically implies B as well. Use of B requires the B capability. For further information, see B(7)." msgstr "このフラグは B(2) B フラグと同じ効果を持つ。 PID 名前空間を共有しない。 呼び出し元プロセスは、 すでに存在するどのプロセスとも共有されない新しい PID 名前空間を、 自身の子プロセス用に持つことになる。 このプロセスにより作成される最初の子プロセスはプロセス ID 1 を持ち、 この新しい名前空間において B(1) の役割を持つとみなされる。 B を指定すると、自動的に B も指定されたものとみなされる。 B を使用するには B ケーパビリティが必要である。 詳細な情報は B(7) を参照。" #. type: Plain text #: build/C/man2/unshare.2:190 msgid "This flag has the same effect as the B(2) B flag. Unshare the user namespace, so that the calling process is moved into a new user namespace which is not shared with any previously existing process. As with the child process created by B(2) with the B flag, the caller obtains a full set of capabilities in the new namespace." msgstr "このフラグは B(2) B フラグと同じ効果を持つ。 ユーザー名前空間を共有せず、 呼び出し元プロセスはすでに存在するどのプロセスとも共有されない新しいユーザー名前空間に移動される。 B フラグを指定して B(2) で作成された子プロセスと同様に、 呼び出し元は新しい名前空間ですべてのケーパビリティを獲得する。" #. commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71 #. https://lwn.net/Articles/543273/ #. type: Plain text #: build/C/man2/unshare.2:206 msgid "B requires that the calling process is not threaded; specifying B automatically implies B. Since Linux 3.9, B also automatically implies B. B requires that the user ID and group ID of the calling process are mapped to user IDs and group IDs in the user namespace of the calling process at the time of the call." msgstr "B を使うには、呼び出し元プロセスがスレッド化されていないことが必要である。 B を指定すると、自動的に B が指定されたものとみなされる。 Linux 3.9 以降では、 B が指定された場合 B も指定されたとみなされる。 B を使うには、呼び出し元プロセスのユーザー ID とグループ ID が、 呼び出した時点で、 呼び出し元プロセスのユーザー名前空間のユーザー ID とグループ ID にマッピングされている必要がある。" #. type: Plain text #: build/C/man2/unshare.2:223 msgid "This flag has the same effect as the B(2) B flag. Unshare the UTS IPC namespace, so that the calling process has a private copy of the UTS namespace which is not shared with any other process. Use of B requires the B capability." msgstr "" "このフラグは B(2) B フラグと同じ効果を持つ。 UTS\n" "IPC 名前空間を共有せず、呼び出し元プロセスは他のプロセスとは共有しない\n" "固有の UTS IPC 名前空間のコピーを持つ。 このフラグを指定すると、\n" "B も暗黙のうちに指定される。B を使用するには\n" "B ケーパビリティが必要である。" #. type: TP #: build/C/man2/unshare.2:223 #, no-wrap msgid "B (since Linux 2.6.26)" msgstr "B (Linux 2.6.26 以降)" #. commit 9edff4ab1f8d82675277a04e359d0ed8bf14a7b7 #. CLONE_NEWNS If CLONE_SIGHAND is set and signals are also being shared #. (i.e., current->signal->count > 1), force CLONE_THREAD. #. type: Plain text #: build/C/man2/unshare.2:243 msgid "This flag reverses the effect of the B(2) B flag. Unshare System\\ V semaphore adjustment (I) values, so that the calling process has a new empty I list that is not shared with any other process. If this is the last process that has a reference to the process's current I list, then the adjustments in that list are applied to the corresponding semaphores, as described in B(2)." msgstr "このフラグは B(2) B フラグの効果を逆転させる。 System\\ V セマフォの調整値 (I) を共有せず、 呼び出し元プロセスは他のプロセスとは共有されない新しい空の I リストを持つ。 そのプロセスが、自分の現在の I リストへの参照を持つ最後のプロセスであれば、 このリストの調整値は対応するセマフォに適用される (B(2) に説明がある通り)。" # #. As at 3.9, 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. #. See kernel/fork.c::check_unshare_flags() #. type: Plain text #: build/C/man2/unshare.2:270 msgid "In addition, B, B, and B can be specified in I if the caller is single threaded (i.e., it is not sharing its address space with another process or thread). In this case, these flags have no effect. (Note also that specifying B automatically implies B, and specifying B automatically implies B.) If the process is multithreaded, then the use of these flags results in an error." msgstr "上記に加えて、 呼び出し元がシングルスレッドの場合 (すなわち別のプロセスやスレッドとアドレス空間を共有していない場合)、 B, B, B を指定することができる。 この場合、 これらのフラグは効果を持たない。 (B を指定すると自動的に B が指定されたとみなされ、 B を指定すると自動的に B が指定されたとみなされる点に注意してほしい。) プロセスがマルチスレッドの場合、 これらのフラグを使用するとエラーとなる。" #. type: Plain text #: build/C/man2/unshare.2:277 msgid "If I is specified as zero, then B() is a no-op; no changes are made to the calling process's execution context." msgstr "I に 0 が指定された場合、 B() は何も行わないので、 呼び出し元プロセスの実行コンテキストは、何も変更されない。" #. type: Plain text #: build/C/man2/unshare.2:282 msgid "On success, zero returned. On failure, -1 is returned and I is set to indicate the error." msgstr "成功した場合は 0 が返される。 失敗した場合は -1 が返されて、 I にはエラーを示す値が設定される。" #. type: Plain text #: build/C/man2/unshare.2:287 msgid "An invalid bit was specified in I." msgstr "I に不正なビットが指定された。" #. type: Plain text #: build/C/man2/unshare.2:296 msgid "B, B, or B was specified in I, and the caller is multithreaded." msgstr "B, B, B が I に指定されたが、 呼び出したプロセスはマルチスレッドである。" #. type: Plain text #: build/C/man2/unshare.2:300 msgid "Cannot allocate sufficient memory to copy parts of caller's context that need to be unshared." msgstr "呼び出し元のコンテキストのうち共有を解除する必要がある部分をコピーするために、 十分なメモリが確保できなかった。" #. type: Plain text #: build/C/man2/unshare.2:303 msgid "The calling process did not have the required privileges for this operation." msgstr "呼び出し元プロセスはこの操作を行うのに必要な特権を持っていなかった。" #. type: Plain text #: build/C/man2/unshare.2:334 msgid "The B() system call was added to Linux in kernel 2.6.16." msgstr "B() システムコールは Linux カーネル 2.6.16 で追加された。" #. type: Plain text #: build/C/man2/unshare.2:338 msgid "The B() system call is Linux-specific." msgstr "B() システムコールは Linux 固有である。" #. 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. #. type: Plain text #: build/C/man2/unshare.2:372 msgid "Not all of the process attributes that can be shared when a new process is created using B(2) can be unshared using B(). In particular, as at kernel 3.8, B() does not implement flags that reverse the effects of B, B, or B. Such functionality may be added in the future, if required." msgstr "B(2) で新しいプロセスを生成したときに共有される全てのプロセス属性を、 B() によって共有の解除ができるわけではない。 特に、カーネル 3.8 時点では、 B() に B, B, B の効果を取り消すためのフラグが実装されていない。 これらの機能は、必要であれば将来追加されるかもしれない。" #. type: Plain text #: build/C/man2/unshare.2:381 msgid "The program below provides a simple implementation of the B(1) command, which unshares one or more namespaces and executes the command supplied in its command-line arguments. Here's an example of the use of this program, running a shell in a new mount namespace, and verifying that the original shell and the new shell are in separate mount namespaces:" msgstr "以下のプログラムは B(1) コマンドの簡単な実装である。 このコマンドは、1 つ以上の名前空間の unshare を行ってから、 コマンドライン引き数で指定されたコマンドを実行する。 以下はこのプログラムの使用例である。 新しいマウント名前空間でシェルを実行し、 元のシェルと新しいシェルが別のマウント名前空間にいることを確認している。" #. type: Plain text #: build/C/man2/unshare.2:390 #, no-wrap msgid "" "$ B\n" "mnt:[4026531840]\n" "$ B\n" "[sudo] password for cecilia:\n" "# B\n" "mnt:[4026532325]\n" msgstr "" "$ B\n" "mnt:[4026531840]\n" "$ B\n" "[sudo] password for cecilia:\n" "# B\n" "mnt:[4026532325]\n" #. type: Plain text #: build/C/man2/unshare.2:396 msgid "The differing output of the two B(1) commands shows that the two shells are in different mount namespaces." msgstr "2 つの B(1) コマンドの出力が違うことから、 2 つのシェルは異なるマウント名前空間にいることが分かる。" #. type: Plain text #: build/C/man2/unshare.2:400 #, no-wrap msgid "/* unshare.c\n" msgstr "/* unshare.c\n" #. type: Plain text #: build/C/man2/unshare.2:409 #, no-wrap msgid "" " A simple implementation of the unshare(1) command: unshare\n" " namespaces and execute a command.\n" "*/\n" "#define _GNU_SOURCE\n" "#include Esched.hE\n" "#include Eunistd.hE\n" "#include Estdlib.hE\n" "#include Estdio.hE\n" msgstr "" " A simple implementation of the unshare(1) command: unshare\n" " namespaces and execute a command.\n" "*/\n" "#define _GNU_SOURCE\n" "#include Esched.hE\n" "#include Eunistd.hE\n" "#include Estdlib.hE\n" "#include Estdio.hE\n" #. type: Plain text #: build/C/man2/unshare.2:412 #, no-wrap msgid "" "/* A simple error-handling function: print an error message based\n" " on the value in \\(aqerrno\\(aq and terminate the calling process */\n" msgstr "" "/* A simple error-handling function: print an error message based\n" " on the value in \\(aqerrno\\(aq and terminate the calling process */\n" #. type: Plain text #: build/C/man2/unshare.2:429 #, no-wrap msgid "" "static void\n" "usage(char *pname)\n" "{\n" " fprintf(stderr, \"Usage: %s [options] program [arg...]\\en\", pname);\n" " fprintf(stderr, \"Options can be:\\en\");\n" " fprintf(stderr, \" -i unshare IPC namespace\\en\");\n" " fprintf(stderr, \" -m unshare mount namespace\\en\");\n" " fprintf(stderr, \" -n unshare network namespace\\en\");\n" " fprintf(stderr, \" -p unshare PID namespace\\en\");\n" " fprintf(stderr, \" -u unshare UTS namespace\\en\");\n" " fprintf(stderr, \" -U unshare user namespace\\en\");\n" " exit(EXIT_FAILURE);\n" "}\n" msgstr "" "static void\n" "usage(char *pname)\n" "{\n" " fprintf(stderr, \"Usage: %s [options] program [arg...]\\en\", pname);\n" " fprintf(stderr, \"Options can be:\\en\");\n" " fprintf(stderr, \" -i unshare IPC namespace\\en\");\n" " fprintf(stderr, \" -m unshare mount namespace\\en\");\n" " fprintf(stderr, \" -n unshare network namespace\\en\");\n" " fprintf(stderr, \" -p unshare PID namespace\\en\");\n" " fprintf(stderr, \" -u unshare UTS namespace\\en\");\n" " fprintf(stderr, \" -U unshare user namespace\\en\");\n" " exit(EXIT_FAILURE);\n" "}\n" #. type: Plain text #: build/C/man2/unshare.2:434 #, no-wrap msgid "" "int\n" "main(int argc, char *argv[])\n" "{\n" " int flags, opt;\n" msgstr "" "int\n" "main(int argc, char *argv[])\n" "{\n" " int flags, opt;\n" #. type: Plain text #: build/C/man2/unshare.2:436 #, no-wrap msgid " flags = 0;\n" msgstr " flags = 0;\n" #. type: Plain text #: build/C/man2/unshare.2:448 #, no-wrap msgid "" " while ((opt = getopt(argc, argv, \"imnpuU\")) != -1) {\n" " switch (opt) {\n" " case \\(aqi\\(aq: flags |= CLONE_NEWIPC; break;\n" " case \\(aqm\\(aq: flags |= CLONE_NEWNS; break;\n" " case \\(aqn\\(aq: flags |= CLONE_NEWNET; break;\n" " case \\(aqp\\(aq: flags |= CLONE_NEWPID; break;\n" " case \\(aqu\\(aq: flags |= CLONE_NEWUTS; break;\n" " case \\(aqU\\(aq: flags |= CLONE_NEWUSER; break;\n" " default: usage(argv[0]);\n" " }\n" " }\n" msgstr "" " while ((opt = getopt(argc, argv, \"imnpuU\")) != -1) {\n" " switch (opt) {\n" " case \\(aqi\\(aq: flags |= CLONE_NEWIPC; break;\n" " case \\(aqm\\(aq: flags |= CLONE_NEWNS; break;\n" " case \\(aqn\\(aq: flags |= CLONE_NEWNET; break;\n" " case \\(aqp\\(aq: flags |= CLONE_NEWPID; break;\n" " case \\(aqu\\(aq: flags |= CLONE_NEWUTS; break;\n" " case \\(aqU\\(aq: flags |= CLONE_NEWUSER; break;\n" " default: usage(argv[0]);\n" " }\n" " }\n" #. type: Plain text #: build/C/man2/unshare.2:451 #, no-wrap msgid "" " if (optind E= argc)\n" " usage(argv[0]);\n" msgstr "" " if (optind E= argc)\n" " usage(argv[0]);\n" #. type: Plain text #: build/C/man2/unshare.2:454 #, no-wrap msgid "" " if (unshare(flags) == -1)\n" " errExit(\"unshare\");\n" msgstr "" " if (unshare(flags) == -1)\n" " errExit(\"unshare\");\n" #. type: Plain text #: build/C/man2/unshare.2:458 #, no-wrap msgid "" " execvp(argv[optind], &argv[optind]);\n" " errExit(\"execvp\");\n" "}\n" msgstr "" " execvp(argv[optind], &argv[optind]);\n" " errExit(\"execvp\");\n" "}\n" #. type: Plain text #: build/C/man2/unshare.2:467 msgid "B(1), B(2), B(2), B(2), B(2), B(2), B(7)" msgstr "B(1), B(2), B(2), B(2), B(2), B(2), B(7)" #. type: Plain text #: build/C/man2/unshare.2:470 msgid "I in the Linux kernel source tree" msgstr "Linux カーネルソース内の I"