# 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. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2015-02-04 23:33+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\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 "" #. type: TH #: build/C/man3/CPU_SET.3:27 #, no-wrap msgid "2012-03-15" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:41 #, no-wrap msgid "BIB<);>\n" msgstr "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:47 #, no-wrap msgid "BIB<);>\n" msgstr "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:56 #, no-wrap msgid "BIB<, cpu_set_t *>IB<);>\n" msgstr "" #. type: Plain text #: build/C/man3/CPU_SET.3:60 #, no-wrap msgid "" "BIB<);>\n" "BIB<);>\n" "BIB<);>\n" msgstr "" #. type: Plain text #: build/C/man3/CPU_SET.3:62 #, no-wrap msgid "BIB<, cpu_set_t *>IB<);>\n" msgstr "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:68 #, no-wrap msgid "BIB<, cpu_set_t *>IB<);>\n" msgstr "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:78 #, no-wrap msgid "" "BIB<, cpu_set_t *>IB<, cpu_set_t " "*>IB<);>\n" msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:96 msgid "The following macros are provided to operate on the CPU set I:" msgstr "" #. type: TP #: build/C/man3/CPU_SET.3:96 #, no-wrap msgid "B()" msgstr "" #. type: Plain text #: build/C/man3/CPU_SET.3:101 msgid "Clears I, so that it contains no CPUs." msgstr "" #. type: TP #: build/C/man3/CPU_SET.3:101 #, no-wrap msgid "B()" msgstr "" #. type: Plain text #: build/C/man3/CPU_SET.3:107 msgid "Add CPU I to I." msgstr "" #. type: TP #: build/C/man3/CPU_SET.3:107 #, no-wrap msgid "B()" msgstr "" #. type: Plain text #: build/C/man3/CPU_SET.3:113 msgid "Remove CPU I from I." msgstr "" #. type: TP #: build/C/man3/CPU_SET.3:113 #, no-wrap msgid "B()" msgstr "" #. type: Plain text #: build/C/man3/CPU_SET.3:119 msgid "Test to see if CPU I is a member of I." msgstr "" #. type: TP #: build/C/man3/CPU_SET.3:119 #, no-wrap msgid "B()" msgstr "" #. type: Plain text #: build/C/man3/CPU_SET.3:123 msgid "Return the number of CPUs in I." msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:141 msgid "The following macros perform logical operations on CPU sets:" msgstr "" #. type: TP #: build/C/man3/CPU_SET.3:141 #, no-wrap msgid "B()" msgstr "" #. 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 "" #. type: TP #: build/C/man3/CPU_SET.3:150 #, no-wrap msgid "B()" msgstr "" #. 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 "" #. type: TP #: build/C/man3/CPU_SET.3:159 #, no-wrap msgid "B()" msgstr "" #. 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 "" #. type: TP #: build/C/man3/CPU_SET.3:173 #, no-wrap msgid "B()" msgstr "" #. type: Plain text #: build/C/man3/CPU_SET.3:176 msgid "Test whether two CPU set contain exactly the same CPUs." msgstr "" #. type: SS #: build/C/man3/CPU_SET.3:176 #, no-wrap msgid "Dynamically sized CPU sets" msgstr "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:184 msgid "The following macros are used to allocate and deallocate CPU sets:" msgstr "" #. type: TP #: build/C/man3/CPU_SET.3:184 #, no-wrap msgid "B()" msgstr "" #. 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 "" #. type: TP #: build/C/man3/CPU_SET.3:189 #, no-wrap msgid "B()" msgstr "" #. 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 "" #. type: TP #: build/C/man3/CPU_SET.3:199 #, no-wrap msgid "B()" msgstr "" #. type: Plain text #: build/C/man3/CPU_SET.3:203 msgid "Free a CPU set previously allocated by B()." msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:225 msgid "B() and B() return the number of CPUs in I." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:252 msgid "B() first appeared in glibc 2.6." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:337 #, no-wrap msgid " num_cpus = atoi(argv[1]);\n" msgstr "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:345 #, no-wrap msgid " size = CPU_ALLOC_SIZE(num_cpus);\n" msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man3/CPU_SET.3:355 #, no-wrap msgid "" " CPU_FREE(cpusetp);\n" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" #. 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 "" #. 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.79 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 "" #. type: TH #: build/C/man2/clone.2:42 #, no-wrap msgid "CLONE" msgstr "" #. type: TH #: build/C/man2/clone.2:42 build/C/man2/unshare.2:20 #, no-wrap msgid "2014-09-21" msgstr "" #. type: Plain text #: build/C/man2/clone.2:45 msgid "clone, __clone2 - create a child process" msgstr "" #. type: Plain text #: build/C/man2/clone.2:48 #, no-wrap msgid "/* Prototype for the glibc wrapper function */\n" msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:57 #, no-wrap msgid "/* Prototype for the raw system call */\n" msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:66 msgid "" "Feature Test Macro Requirements for glibc wrapper function (see " "B(7)):" msgstr "" #. type: Plain text #: build/C/man2/clone.2:69 msgid "B():" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:87 msgid "B() creates a new process, in a manner similar to B(2)." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/clone.2:178 #, no-wrap msgid "B (since Linux 2.5.49)" msgstr "" #. 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 "" #. type: TP #: build/C/man2/clone.2:188 #, no-wrap msgid "B (since Linux 2.5.49)" msgstr "" #. type: Plain text #: build/C/man2/clone.2:193 msgid "Store child thread ID at location I in child memory." msgstr "" #. type: TP #: build/C/man2/clone.2:193 #, no-wrap msgid "B (since Linux 2.0)" msgstr "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/clone.2:220 #, no-wrap msgid "B (since Linux 2.0)" msgstr "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/clone.2:247 #, no-wrap msgid "B (since Linux 2.6.25)" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/clone.2:277 build/C/man2/unshare.2:96 #, no-wrap msgid "B (since Linux 2.6.19)" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:317 msgid "For further information on IPC namespaces, see B(7)." msgstr "" #. type: TP #: build/C/man2/clone.2:317 build/C/man2/unshare.2:113 #, no-wrap msgid "B (since Linux 2.6.24)" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:357 msgid "Only a privileged process (B) can employ B." msgstr "" #. type: TP #: build/C/man2/clone.2:357 #, no-wrap msgid "B (since Linux 2.4.19)" msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:370 msgid "For further information on mount namespaces, see B(7)." msgstr "" #. 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 "" #. type: TP #: build/C/man2/clone.2:383 #, no-wrap msgid "B (since Linux 2.6.24)" msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:405 msgid "" "For further information on PID namespaces, see B(7) and " "B(7)" msgstr "" #. 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 "" #. type: TP #: build/C/man2/clone.2:414 #, no-wrap msgid "B" msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:436 msgid "" "For further information on user namespaces, see B(7) and " "B(7)" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/clone.2:464 build/C/man2/unshare.2:209 #, no-wrap msgid "B (since Linux 2.6.19)" msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:492 msgid "Only a privileged process (B) can employ B." msgstr "" #. type: Plain text #: build/C/man2/clone.2:495 msgid "For further information on UTS namespaces, see B(7)." msgstr "" #. type: TP #: build/C/man2/clone.2:495 #, no-wrap msgid "B (since Linux 2.3.12)" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/clone.2:516 #, no-wrap msgid "B (since Linux 2.5.49)" msgstr "" #. 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 "" #. type: TP #: build/C/man2/clone.2:524 #, no-wrap msgid "B (obsolete)" msgstr "" #. 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 "" #. type: TP #: build/C/man2/clone.2:535 #, no-wrap msgid "B (since Linux 2.2)" msgstr "" #. 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 "" #. type: TP #: build/C/man2/clone.2:542 #, no-wrap msgid "B (since Linux 2.5.32)" msgstr "" #. 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 "" #. type: TP #: build/C/man2/clone.2:549 #, no-wrap msgid "B (since Linux 2.0)" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/clone.2:584 #, no-wrap msgid "B (since Linux 2.6.0-test2)" msgstr "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/clone.2:601 #, no-wrap msgid "B (since Linux 2.5.10)" msgstr "" #. 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 "" #. type: TP #: build/C/man2/clone.2:619 #, no-wrap msgid "B (since Linux 2.4.0-test8)" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/clone.2:741 #, no-wrap msgid "B (since Linux 2.5.46)" msgstr "" #. 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 "" #. type: TP #: build/C/man2/clone.2:748 #, no-wrap msgid "B (since Linux 2.2)" msgstr "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/clone.2:766 #, no-wrap msgid "B (since Linux 2.0)" msgstr "" #. 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 "" #. 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 "" #. type: SS #: build/C/man2/clone.2:788 build/C/man2/sched_setaffinity.2:212 #, no-wrap msgid "C library/kernel ABI differences" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: SS #: build/C/man2/clone.2:829 #, no-wrap msgid "blackfin, m68k, and sparc" msgstr "" #. 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 "" #. type: SS #: build/C/man2/clone.2:833 #, no-wrap msgid "ia64" msgstr "" #. type: Plain text #: build/C/man2/clone.2:835 msgid "On ia64, a different interface is used:" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: SS #: build/C/man2/clone.2:865 #, no-wrap msgid "Linux 2.4 and earlier" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:887 msgid "Too many processes are already running; see B(2)." msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:894 msgid "" "B was specified, but B was not. (Since Linux " "2.6.0-test6.)" msgstr "" #. .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 "" #. commit e66eded8309ebf679d3d3c1f5820d1f2ca332c71 #. type: Plain text #: build/C/man2/clone.2:918 msgid "Both B and B were specified in I." msgstr "" #. type: TP #: build/C/man2/clone.2:918 #, no-wrap msgid "B (since Linux 3.9)" msgstr "" #. type: Plain text #: build/C/man2/clone.2:926 msgid "Both B and B were specified in I." msgstr "" #. type: Plain text #: build/C/man2/clone.2:934 msgid "Both B and B were specified in I." msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:952 msgid "Returned by B() when a zero value is specified for I." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:1004 msgid "B was specified by a process other than process 0." msgstr "" #. 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 "" #. type: TP #: build/C/man2/clone.2:1012 build/C/man2/unshare.2:311 #, no-wrap msgid "B (since Linux 3.9)" msgstr "" #. 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 "" #. type: TP #: build/C/man2/clone.2:1022 build/C/man2/unshare.2:321 #, no-wrap msgid "B (since Linux 3.11)" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:1067 msgid "" "On i386, B() should not be called through vsyscall, but directly " "through I." msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:1101 #, no-wrap msgid " #include Esyscall.hE\n" msgstr "" #. type: Plain text #: build/C/man2/clone.2:1103 #, no-wrap msgid " pid_t mypid;\n" msgstr "" #. type: Plain text #: build/C/man2/clone.2:1105 #, no-wrap msgid " mypid = syscall(SYS_getpid);\n" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:1139 #, no-wrap msgid " /* Change hostname in UTS namespace of child */\n" msgstr "" #. type: Plain text #: build/C/man2/clone.2:1142 #, no-wrap msgid "" " if (sethostname(arg, strlen(arg)) == -1)\n" " errExit(\"sethostname\");\n" msgstr "" #. type: Plain text #: build/C/man2/clone.2:1144 #, no-wrap msgid " /* Retrieve and display hostname */\n" msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:1154 #, no-wrap msgid " sleep(200);\n" msgstr "" #. type: Plain text #: build/C/man2/clone.2:1157 #, no-wrap msgid "" " return 0; /* Child terminates now */\n" "}\n" msgstr "" #. type: Plain text #: build/C/man2/clone.2:1159 #, no-wrap msgid "#define STACK_SIZE (1024 * 1024) /* Stack size for cloned child */\n" msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:1174 #, no-wrap msgid " /* Allocate stack for child */\n" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:1189 #, no-wrap msgid " /* Parent falls through to here */\n" msgstr "" #. type: Plain text #: build/C/man2/clone.2:1191 #, no-wrap msgid " sleep(1); /* Give child time to change its hostname */\n" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/clone.2:1205 #, no-wrap msgid "" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" #. 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 "" #. type: TH #: build/C/man2/kcmp.2:28 #, no-wrap msgid "KCMP" msgstr "" #. type: TH #: build/C/man2/kcmp.2:28 #, no-wrap msgid "2013-12-08" msgstr "" #. type: Plain text #: build/C/man2/kcmp.2:31 msgid "kcmp - compare two processes to determine if they share a kernel resource" msgstr "" #. type: Plain text #: build/C/man2/kcmp.2:34 #, no-wrap msgid "B<#include Elinux/kcmp.hE>\n" msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/kcmp.2:41 msgid "I: There is no glibc wrapper for this system call; see NOTES." msgstr "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/kcmp.2:55 #, no-wrap msgid "B" msgstr "" #. 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 "" #. type: TP #: build/C/man2/kcmp.2:67 #, no-wrap msgid "B" msgstr "" #. 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 "" #. type: TP #: build/C/man2/kcmp.2:75 #, no-wrap msgid "B" msgstr "" #. 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 "" #. type: TP #: build/C/man2/kcmp.2:84 #, no-wrap msgid "B" msgstr "" #. 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 "" #. type: TP #: build/C/man2/kcmp.2:92 #, no-wrap msgid "B" msgstr "" #. 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 "" #. type: TP #: build/C/man2/kcmp.2:100 #, no-wrap msgid "B" msgstr "" #. 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 "" #. type: TP #: build/C/man2/kcmp.2:109 #, no-wrap msgid "B" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: IP #: build/C/man2/kcmp.2:142 #, no-wrap msgid "0" msgstr "" #. 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 "" #. type: IP #: build/C/man2/kcmp.2:147 #, no-wrap msgid "1" msgstr "" #. type: Plain text #: build/C/man2/kcmp.2:151 msgid "I is less than I." msgstr "" #. type: IP #: build/C/man2/kcmp.2:151 #, no-wrap msgid "2" msgstr "" #. type: Plain text #: build/C/man2/kcmp.2:155 msgid "I is greater than I." msgstr "" #. type: IP #: build/C/man2/kcmp.2:155 #, no-wrap msgid "3" msgstr "" #. type: Plain text #: build/C/man2/kcmp.2:160 msgid "I is not equal to I, but ordering information is unavailable." msgstr "" #. type: Plain text #: build/C/man2/kcmp.2:165 msgid "On error, -1 is returned, and I is set appropriately." msgstr "" #. 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 "" #. type: TP #: build/C/man2/kcmp.2:171 build/C/man2/setns.2:146 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/kcmp.2:181 msgid "I is B and I or I is not an open file descriptor." msgstr "" #. type: Plain text #: build/C/man2/kcmp.2:185 msgid "I is invalid." msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/kcmp.2:198 msgid "Process I or I does not exist." msgstr "" #. type: Plain text #: build/C/man2/kcmp.2:202 msgid "The B() system call first appeared in Linux 3.5." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/kcmp.2:225 msgid "B(2), B(2)" msgstr "" #. type: TH #: build/C/man2/sched_get_priority_max.2:29 #, no-wrap msgid "SCHED_GET_PRIORITY_MAX" msgstr "" #. type: TH #: build/C/man2/sched_get_priority_max.2:29 #, no-wrap msgid "2014-05-12" msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:36 msgid "BIB<);>" msgstr "" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:38 msgid "BIB<);>" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_get_priority_max.2:113 msgid "The argument I does not identify a defined scheduling policy." msgstr "" #. 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 "" #. 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 "" #. type: TH #: build/C/man3/sched_getcpu.3:26 #, no-wrap msgid "SCHED_GETCPU" msgstr "" #. type: TH #: build/C/man3/sched_getcpu.3:26 #, no-wrap msgid "2014-05-10" msgstr "" #. type: Plain text #: build/C/man3/sched_getcpu.3:29 msgid "sched_getcpu - determine CPU on which the calling thread is running" msgstr "" #. type: Plain text #: build/C/man3/sched_getcpu.3:34 #, no-wrap msgid "B\n" msgstr "" #. 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 "" #. type: Plain text #: build/C/man3/sched_getcpu.3:42 msgid "B():" msgstr "" #. 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 "" #. 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 "" #. type: TP #: build/C/man3/sched_getcpu.3:66 build/C/man2/sched_rr_get_interval.2:87 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man3/sched_getcpu.3:70 msgid "This kernel does not implement B(2)." msgstr "" #. type: Plain text #: build/C/man3/sched_getcpu.3:72 msgid "This function is available since glibc 2.6." msgstr "" #. 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 "" #. type: Plain text #: build/C/man3/sched_getcpu.3:77 msgid "The B() function is thread-safe." msgstr "" #. type: Plain text #: build/C/man3/sched_getcpu.3:80 msgid "B() is glibc-specific." msgstr "" #. 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 "" #. type: Plain text #: build/C/man3/sched_getcpu.3:92 msgid "is equivalent to the following B(2) call:" msgstr "" #. 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 "" #. type: Plain text #: build/C/man3/sched_getcpu.3:103 msgid "B(2), B(7)" msgstr "" #. type: TH #: build/C/man2/sched_rr_get_interval.2:29 #, no-wrap msgid "SCHED_RR_GET_INTERVAL" msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:36 msgid "BIB<, struct timespec * >IB<);>" msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:51 msgid "The I structure has the following form:" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/sched_rr_get_interval.2:81 build/C/man2/sched_setaffinity.2:117 #, no-wrap msgid "B" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: SS #: build/C/man2/sched_rr_get_interval.2:103 #, no-wrap msgid "Linux notes" msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_rr_get_interval.2:134 build/C/man2/sched_yield.2:81 msgid "B(7)" msgstr "" #. type: TH #: build/C/man2/sched_setaffinity.2:34 #, no-wrap msgid "SCHED_SETAFFINITY" msgstr "" #. type: TH #: build/C/man2/sched_setaffinity.2:34 #, no-wrap msgid "2014-12-31" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_setaffinity.2:161 msgid "These system calls are Linux-specific." msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_setaffinity.2:189 msgid "B(7) has a description of the Linux scheduling scheme." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: TH #: build/C/man2/sched_setattr.2:26 #, no-wrap msgid "SCHED_SETATTR" msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/sched_setattr.2:30 msgid "sched_setattr, sched_getattr - set and get scheduling policy and attributes" msgstr "" #. 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 "" #. 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 "" #. type: SS #: build/C/man2/sched_setattr.2:42 #, no-wrap msgid "sched_setattr()" msgstr "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/sched_setattr.2:56 build/C/man2/sched_setscheduler.2:73 #, no-wrap msgid "B" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/sched_setattr.2:78 build/C/man2/sched_setscheduler.2:99 #, no-wrap msgid "B" msgstr "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/sched_setattr.2:86 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/sched_setattr.2:91 msgid "a deadline scheduling policy; see B(7) for details." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/sched_setattr.2:146 #, no-wrap msgid "I" msgstr "" #. 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 "" #. type: TP #: build/C/man2/sched_setattr.2:151 #, no-wrap msgid "I" msgstr "" #. 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 "" #. type: TP #: build/C/man2/sched_setattr.2:162 #, no-wrap msgid "I" msgstr "" #. 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 "" #. type: TP #: build/C/man2/sched_setattr.2:173 #, no-wrap msgid "I" msgstr "" #. 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 "" #. type: TP #: build/C/man2/sched_setattr.2:186 #, no-wrap msgid "I" msgstr "" #. 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 "" #. type: TP #: build/C/man2/sched_setattr.2:195 #, no-wrap msgid "I" msgstr "" #. 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 "" #. type: TP #: build/C/man2/sched_setattr.2:199 #, no-wrap msgid "I" msgstr "" #. 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 "" #. 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 "" #. type: SS #: build/C/man2/sched_setattr.2:210 #, no-wrap msgid "sched_getattr()" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_setattr.2:276 msgid "" "B() and B() can both fail for the following " "reasons:" msgstr "" #. type: Plain text #: build/C/man2/sched_setattr.2:284 msgid "I is NULL; or I is negative; or I is not zero." msgstr "" #. type: Plain text #: build/C/man2/sched_setattr.2:293 msgid "In addition, B() can fail for the following reasons:" msgstr "" #. type: TP #: build/C/man2/sched_setattr.2:293 build/C/man2/sched_setattr.2:310 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/sched_setattr.2:300 msgid "The buffer specified by I and I is too small." msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/sched_setattr.2:310 msgid "In addition, B() can fail for the following reasons:" msgstr "" #. 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 "" #. type: TP #: build/C/man2/sched_setattr.2:318 #, no-wrap msgid "B" msgstr "" #. type: Plain text #: build/C/man2/sched_setattr.2:323 msgid "B admission control failure, see B(7)." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_setattr.2:353 msgid "These system calls are nonstandard Linux extensions." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: TH #: build/C/man2/sched_setparam.2:30 #, no-wrap msgid "SCHED_SETPARAM" msgstr "" #. type: TH #: build/C/man2/sched_setparam.2:30 #, no-wrap msgid "2014-05-11" msgstr "" #. type: Plain text #: build/C/man2/sched_setparam.2:33 msgid "sched_setparam, sched_getparam - set and get scheduling parameters" msgstr "" #. type: Plain text #: build/C/man2/sched_setparam.2:38 #, no-wrap msgid "" "BIB<, const struct sched_param " "*>IB<);>\n" msgstr "" #. type: Plain text #: build/C/man2/sched_setparam.2:40 #, no-wrap msgid "BIB<, struct sched_param *>IB<);>\n" msgstr "" #. type: Plain text #: build/C/man2/sched_setparam.2:46 #, no-wrap msgid "" "BIB<;\n" " ...\n" "};>\n" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_setparam.2:104 msgid "Invalid arguments: I is NULL or I is negative" msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_setparam.2:119 msgid "The process whose ID is I could not be found." msgstr "" #. 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 "" #. 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 "" #. type: TH #: build/C/man2/sched_setscheduler.2:26 #, no-wrap msgid "SCHED_SETSCHEDULER" msgstr "" #. type: Plain text #: build/C/man2/sched_setscheduler.2:30 msgid "" "sched_setscheduler, sched_getscheduler - set and get scheduling " "policy/parameters" msgstr "" #. type: Plain text #: build/C/man2/sched_setscheduler.2:35 #, no-wrap msgid "BIB<, int >IB<,>\n" msgstr "" #. type: Plain text #: build/C/man2/sched_setscheduler.2:37 #, no-wrap msgid "B< const struct sched_param *>IB<);>\n" msgstr "" #. type: Plain text #: build/C/man2/sched_setscheduler.2:39 #, no-wrap msgid "BIB<);>\n" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_setscheduler.2:90 msgid "For each of the above policies, Isched_priority> must be 0." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_setscheduler.2:153 msgid "Invalid arguments: I is negative or I is NULL." msgstr "" #. type: Plain text #: build/C/man2/sched_setscheduler.2:158 msgid "(B()) I is not one of the recognized policies." msgstr "" #. type: Plain text #: build/C/man2/sched_setscheduler.2:164 msgid "" "(B()) I does not make sense for the specified " "I." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: TH #: build/C/man2/sched_yield.2:29 #, no-wrap msgid "SCHED_YIELD" msgstr "" #. type: Plain text #: build/C/man2/sched_yield.2:32 msgid "sched_yield - yield the processor" msgstr "" #. type: Plain text #: build/C/man2/sched_yield.2:36 msgid "B" msgstr "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/sched_yield.2:52 msgid "In the Linux implementation, B() always succeeds." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: TH #: build/C/man7/sched.7:32 #, no-wrap msgid "SCHED" msgstr "" #. type: Plain text #: build/C/man7/sched.7:35 msgid "sched - overview of scheduling APIs" msgstr "" #. type: SS #: build/C/man7/sched.7:36 #, no-wrap msgid "API summary" msgstr "" #. type: Plain text #: build/C/man7/sched.7:38 msgid "The Linux scheduling APIs are as follows:" msgstr "" #. type: TP #: build/C/man7/sched.7:38 #, no-wrap msgid "B(2)" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man7/sched.7:60 #, no-wrap msgid "B(2)" msgstr "" #. 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 "" #. type: TP #: build/C/man7/sched.7:64 #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: build/C/man7/sched.7:68 msgid "(Linux-specific) Set the CPU affinity of a specified thread." msgstr "" #. type: TP #: build/C/man7/sched.7:68 #, no-wrap msgid "B(2)" msgstr "" #. type: Plain text #: build/C/man7/sched.7:72 msgid "(Linux-specific) Get the CPU affinity of a specified thread." msgstr "" #. type: TP #: build/C/man7/sched.7:72 #, no-wrap msgid "B(2)" msgstr "" #. 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 "" #. type: TP #: build/C/man7/sched.7:79 #, no-wrap msgid "B(2)" msgstr "" #. 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 "" #. type: SS #: build/C/man7/sched.7:87 #, no-wrap msgid "Scheduling policies" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: SS #: build/C/man7/sched.7:132 #, no-wrap msgid "SCHED_FIFO: First in-first out scheduling" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: SS #: build/C/man7/sched.7:177 #, no-wrap msgid "SCHED_RR: Round-robin scheduling" msgstr "" #. 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 "" #. type: SS #: build/C/man7/sched.7:196 #, no-wrap msgid "SCHED_DEADLINE: Sporadic task model deadline scheduling" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" # #. 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 "" #. type: SS #: build/C/man7/sched.7:355 #, no-wrap msgid "SCHED_OTHER: Default Linux time-sharing scheduling" msgstr "" #. 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 "" #. type: SS #: build/C/man7/sched.7:372 #, no-wrap msgid "SCHED_BATCH: Scheduling batch processes" msgstr "" #. 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 "" #. 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 "" #. type: SS #: build/C/man7/sched.7:394 #, no-wrap msgid "SCHED_IDLE: Scheduling very low priority jobs" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man7/sched.7:428 msgid "" "specifying the B flag in I when " "calling B(2)." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: SS #: build/C/man7/sched.7:539 #, no-wrap msgid "Limiting the CPU usage of real-time and deadline processes" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man7/sched.7:570 #, no-wrap msgid "I" msgstr "" #. 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 "" #. type: TP #: build/C/man7/sched.7:578 #, no-wrap msgid "I" msgstr "" #. 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 "" #. type: SS #: build/C/man7/sched.7:592 #, no-wrap msgid "Response time" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: SS #: build/C/man7/sched.7:622 #, no-wrap msgid "Real-time features in the mainline Linux kernel" msgstr "" #. 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 "" #. type: Plain text #: build/C/man7/sched.7:640 #, no-wrap msgid "patch-I-rtI\n" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man7/sched.7:702 msgid "" "The Linux kernel source files I, " "I, " "I, and " "I" msgstr "" #. type: TH #: build/C/man2/setns.2:8 #, no-wrap msgid "SETNS" msgstr "" #. type: TH #: build/C/man2/setns.2:8 #, no-wrap msgid "2015-01-10" msgstr "" #. type: Plain text #: build/C/man2/setns.2:11 msgid "setns - reassociate thread with a namespace" msgstr "" #. type: Plain text #: build/C/man2/setns.2:17 #, no-wrap msgid "BIB<, int >IB<);>\n" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/setns.2:40 #, no-wrap msgid "B<0>" msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/setns.2:47 msgid "I must refer to an IPC namespace." msgstr "" #. type: TP #: build/C/man2/setns.2:47 #, no-wrap msgid "B (since Linux 3.0)" msgstr "" #. type: Plain text #: build/C/man2/setns.2:51 msgid "I must refer to a network namespace." msgstr "" #. type: TP #: build/C/man2/setns.2:51 #, no-wrap msgid "B (since Linux 3.8)" msgstr "" #. type: Plain text #: build/C/man2/setns.2:55 msgid "I must refer to a mount namespace." msgstr "" #. type: TP #: build/C/man2/setns.2:55 build/C/man2/unshare.2:149 #, no-wrap msgid "B (since Linux 3.8)" msgstr "" #. type: Plain text #: build/C/man2/setns.2:59 msgid "I must refer to a descendant PID namespace." msgstr "" #. type: TP #: build/C/man2/setns.2:59 build/C/man2/unshare.2:176 #, no-wrap msgid "B (since Linux 3.8)" msgstr "" #. type: Plain text #: build/C/man2/setns.2:63 msgid "I must refer to a user namespace." msgstr "" #. type: TP #: build/C/man2/setns.2:63 #, no-wrap msgid "B (since Linux 3.0)" msgstr "" #. type: Plain text #: build/C/man2/setns.2:67 msgid "I must refer to a UTS namespace." msgstr "" #. 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 "" #. 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 changes only " "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 allowed only 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/setns.2:150 msgid "I is not a valid file descriptor." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/setns.2:195 msgid "The B() system call is Linux-specific." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/setns.2:295 msgid "" "B(2), B(2), B(2), B(2), B(7), " "B(7)" msgstr "" #. type: TH #: build/C/man2/unshare.2:20 #, no-wrap msgid "UNSHARE" msgstr "" #. type: Plain text #: build/C/man2/unshare.2:23 msgid "unshare - disassociate parts of the process execution context" msgstr "" #. type: Plain text #: build/C/man2/unshare.2:28 #, no-wrap msgid "BIB<);>\n" msgstr "" #. type: Plain text #: build/C/man2/unshare.2:36 msgid "B():" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/unshare.2:74 #, no-wrap msgid "B" msgstr "" #. 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 "" #. type: TP #: build/C/man2/unshare.2:82 #, no-wrap msgid "B" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/unshare.2:128 #, no-wrap msgid "B" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: TP #: build/C/man2/unshare.2:223 #, no-wrap msgid "B (since Linux 2.6.26)" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/unshare.2:287 msgid "An invalid bit was specified in I." msgstr "" #. type: Plain text #: build/C/man2/unshare.2:296 msgid "" "B, B, or B was specified in I, " "and the caller is multithreaded." msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/unshare.2:338 msgid "The B() system call is Linux-specific." msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/unshare.2:400 #, no-wrap msgid "/* unshare.c\n" msgstr "" #. 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 "" #. 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 "" #. 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 "" #. 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 "" #. type: Plain text #: build/C/man2/unshare.2:436 #, no-wrap msgid " flags = 0;\n" msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/unshare.2:451 #, no-wrap msgid "" " if (optind E= argc)\n" " usage(argv[0]);\n" msgstr "" #. type: Plain text #: build/C/man2/unshare.2:454 #, no-wrap msgid "" " if (unshare(flags) == -1)\n" " errExit(\"unshare\");\n" msgstr "" #. type: Plain text #: build/C/man2/unshare.2:458 #, no-wrap msgid "" " execvp(argv[optind], &argv[optind]);\n" " errExit(\"execvp\");\n" "}\n" msgstr "" #. 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 "" #. type: Plain text #: build/C/man2/unshare.2:470 msgid "I in the Linux kernel source tree" msgstr ""