1 # SOME DESCRIPTIVE TITLE
2 # Copyright (C) YEAR Free Software Foundation, Inc.
3 # This file is distributed under the same license as the PACKAGE package.
4 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
9 "Project-Id-Version: PACKAGE VERSION\n"
10 "POT-Creation-Date: 2012-05-01 04:38+0900\n"
11 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13 "Language-Team: LANGUAGE <LL@li.org>\n"
16 "Content-Type: text/plain; charset=UTF-8\n"
17 "Content-Transfer-Encoding: 8bit\n"
20 #: build/C/man2/acct.2:32 build/C/man5/acct.5:23
26 #: build/C/man2/acct.2:32
32 #: build/C/man2/acct.2:32 build/C/man5/acct.5:23 build/C/man7/capabilities.7:46 build/C/man2/capget.2:11 build/C/man7/cpuset.7:24 build/C/man7/credentials.7:25 build/C/man2/getgid.2:25 build/C/man2/getgroups.2:31 build/C/man2/getpid.2:23 build/C/man2/getpriority.2:46 build/C/man2/getresuid.2:27 build/C/man2/getrlimit.2:64 build/C/man2/getrusage.2:39 build/C/man2/getsid.2:25 build/C/man2/getuid.2:26 build/C/man2/iopl.2:33 build/C/man2/ioprio_set.2:25 build/C/man2/ipc.2:26 build/C/man2/seteuid.2:27 build/C/man2/setfsgid.2:29 build/C/man2/setfsuid.2:29 build/C/man2/setgid.2:27 build/C/man2/setpgid.2:46 build/C/man2/setresuid.2:26 build/C/man2/setreuid.2:43 build/C/man2/setsid.2:29 build/C/man2/setuid.2:28 build/C/man7/svipc.7:25 build/C/man3/ulimit.3:27
38 #: build/C/man2/acct.2:32 build/C/man5/acct.5:23 build/C/man7/capabilities.7:46 build/C/man2/capget.2:11 build/C/man7/cpuset.7:24 build/C/man7/credentials.7:25 build/C/man2/getgid.2:25 build/C/man2/getgroups.2:31 build/C/man2/getpid.2:23 build/C/man2/getpriority.2:46 build/C/man2/getresuid.2:27 build/C/man2/getrlimit.2:64 build/C/man2/getrusage.2:39 build/C/man2/getsid.2:25 build/C/man2/getuid.2:26 build/C/man2/iopl.2:33 build/C/man2/ioprio_set.2:25 build/C/man2/ipc.2:26 build/C/man2/seteuid.2:27 build/C/man2/setfsgid.2:29 build/C/man2/setfsuid.2:29 build/C/man2/setgid.2:27 build/C/man2/setpgid.2:46 build/C/man2/setresuid.2:26 build/C/man2/setreuid.2:43 build/C/man2/setsid.2:29 build/C/man2/setuid.2:28 build/C/man7/svipc.7:25 build/C/man3/ulimit.3:27
40 msgid "Linux Programmer's Manual"
44 #: build/C/man2/acct.2:33 build/C/man5/acct.5:24 build/C/man7/capabilities.7:47 build/C/man2/capget.2:12 build/C/man7/cpuset.7:25 build/C/man7/credentials.7:26 build/C/man2/getgid.2:26 build/C/man2/getgroups.2:32 build/C/man2/getpid.2:24 build/C/man2/getpriority.2:47 build/C/man2/getresuid.2:28 build/C/man2/getrlimit.2:65 build/C/man2/getrusage.2:40 build/C/man2/getsid.2:26 build/C/man2/getuid.2:27 build/C/man2/iopl.2:34 build/C/man2/ioprio_set.2:26 build/C/man2/ipc.2:27 build/C/man2/seteuid.2:28 build/C/man2/setfsgid.2:30 build/C/man2/setfsuid.2:30 build/C/man2/setgid.2:28 build/C/man2/setpgid.2:47 build/C/man2/setresuid.2:27 build/C/man2/setreuid.2:44 build/C/man2/setsid.2:30 build/C/man2/setuid.2:29 build/C/man7/svipc.7:26 build/C/man3/ulimit.3:28
50 #: build/C/man2/acct.2:35
51 msgid "acct - switch process accounting on or off"
55 #: build/C/man2/acct.2:35 build/C/man5/acct.5:26 build/C/man2/capget.2:14 build/C/man2/getgid.2:28 build/C/man2/getgroups.2:34 build/C/man2/getpid.2:26 build/C/man2/getpriority.2:49 build/C/man2/getresuid.2:30 build/C/man2/getrlimit.2:67 build/C/man2/getrusage.2:42 build/C/man2/getsid.2:28 build/C/man2/getuid.2:29 build/C/man2/iopl.2:36 build/C/man2/ioprio_set.2:28 build/C/man2/ipc.2:29 build/C/man2/seteuid.2:30 build/C/man2/setfsgid.2:32 build/C/man2/setfsuid.2:32 build/C/man2/setgid.2:30 build/C/man2/setpgid.2:49 build/C/man2/setresuid.2:29 build/C/man2/setreuid.2:46 build/C/man2/setsid.2:32 build/C/man2/setuid.2:31 build/C/man7/svipc.7:28 build/C/man3/ulimit.3:30
61 #: build/C/man2/acct.2:39
63 msgid "B<#include E<lt>unistd.hE<gt>>\n"
67 #: build/C/man2/acct.2:41
69 msgid "B<int acct(const char *>I<filename>B<);>\n"
73 #: build/C/man2/acct.2:47 build/C/man2/getgroups.2:48 build/C/man2/getrlimit.2:84 build/C/man2/getsid.2:36 build/C/man2/seteuid.2:42 build/C/man2/setpgid.2:69 build/C/man2/setreuid.2:58
74 msgid "Feature Test Macro Requirements for glibc (see B<feature_test_macros>(7)):"
78 #: build/C/man2/acct.2:51
79 msgid "B<acct>(): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE\\ E<lt>\\ 500)"
83 #: build/C/man2/acct.2:51 build/C/man5/acct.5:28 build/C/man7/capabilities.7:49 build/C/man2/capget.2:20 build/C/man7/cpuset.7:27 build/C/man7/credentials.7:28 build/C/man2/getgid.2:36 build/C/man2/getgroups.2:52 build/C/man2/getpid.2:34 build/C/man2/getpriority.2:57 build/C/man2/getresuid.2:38 build/C/man2/getrlimit.2:88 build/C/man2/getrusage.2:48 build/C/man2/getsid.2:49 build/C/man2/getuid.2:37 build/C/man2/iopl.2:40 build/C/man2/ioprio_set.2:33 build/C/man2/ipc.2:35 build/C/man2/seteuid.2:51 build/C/man2/setfsgid.2:37 build/C/man2/setfsuid.2:37 build/C/man2/setgid.2:36 build/C/man2/setpgid.2:96 build/C/man2/setresuid.2:37 build/C/man2/setreuid.2:68 build/C/man2/setsid.2:39 build/C/man2/setuid.2:37 build/C/man7/svipc.7:36 build/C/man3/ulimit.3:34
89 #: build/C/man2/acct.2:60
91 "The B<acct>() system call enables or disables process accounting. If "
92 "called with the name of an existing file as its argument, accounting is "
93 "turned on, and records for each terminating process are appended to "
94 "I<filename> as it terminates. An argument of NULL causes accounting to be "
99 #: build/C/man2/acct.2:60 build/C/man2/capget.2:152 build/C/man2/getgroups.2:92 build/C/man2/getpriority.2:105 build/C/man2/getresuid.2:49 build/C/man2/getrlimit.2:430 build/C/man2/getrusage.2:180 build/C/man2/getsid.2:57 build/C/man2/iopl.2:65 build/C/man2/ioprio_set.2:139 build/C/man2/seteuid.2:65 build/C/man2/setfsgid.2:67 build/C/man2/setfsuid.2:67 build/C/man2/setgid.2:51 build/C/man2/setpgid.2:170 build/C/man2/setresuid.2:64 build/C/man2/setreuid.2:89 build/C/man2/setsid.2:50 build/C/man2/setuid.2:68 build/C/man3/ulimit.3:67
105 #: build/C/man2/acct.2:65 build/C/man2/capget.2:157 build/C/man2/getresuid.2:54 build/C/man2/getrusage.2:185 build/C/man2/iopl.2:70 build/C/man2/seteuid.2:70 build/C/man2/setgid.2:56 build/C/man2/setresuid.2:69 build/C/man2/setreuid.2:94 build/C/man2/setuid.2:73
107 "On success, zero is returned. On error, -1 is returned, and I<errno> is set "
112 #: build/C/man2/acct.2:65 build/C/man2/capget.2:171 build/C/man7/cpuset.7:1099 build/C/man2/getgid.2:42 build/C/man2/getgroups.2:106 build/C/man2/getpid.2:42 build/C/man2/getpriority.2:118 build/C/man2/getresuid.2:54 build/C/man2/getrlimit.2:435 build/C/man2/getrusage.2:185 build/C/man2/getsid.2:62 build/C/man2/getuid.2:43 build/C/man2/iopl.2:70 build/C/man2/ioprio_set.2:159 build/C/man2/seteuid.2:70 build/C/man2/setgid.2:56 build/C/man2/setpgid.2:191 build/C/man2/setresuid.2:69 build/C/man2/setreuid.2:94 build/C/man2/setsid.2:57 build/C/man2/setuid.2:73 build/C/man3/ulimit.3:74
118 #: build/C/man2/acct.2:66 build/C/man7/cpuset.7:1115 build/C/man7/cpuset.7:1122 build/C/man7/cpuset.7:1128 build/C/man7/cpuset.7:1136 build/C/man7/cpuset.7:1143 build/C/man2/getpriority.2:138 build/C/man2/setpgid.2:192
124 #: build/C/man2/acct.2:77
126 "Write permission is denied for the specified file, or search permission is "
127 "denied for one of the directories in the path prefix of I<filename> (see "
128 "also B<path_resolution>(7)), or I<filename> is not a regular file."
132 #: build/C/man2/acct.2:77 build/C/man2/capget.2:172 build/C/man7/cpuset.7:1171 build/C/man2/getgroups.2:107 build/C/man2/getresuid.2:55 build/C/man2/getrlimit.2:436 build/C/man2/getrusage.2:186
138 #: build/C/man2/acct.2:81
139 msgid "I<filename> points outside your accessible address space."
143 #: build/C/man2/acct.2:81 build/C/man7/cpuset.7:1237 build/C/man7/cpuset.7:1245
149 #: build/C/man2/acct.2:85
150 msgid "Error writing to the file I<filename>."
154 #: build/C/man2/acct.2:85
160 #: build/C/man2/acct.2:89
161 msgid "I<filename> is a directory."
165 #: build/C/man2/acct.2:89
171 #: build/C/man2/acct.2:93
172 msgid "Too many symbolic links were encountered in resolving I<filename>."
176 #: build/C/man2/acct.2:93 build/C/man7/cpuset.7:1250 build/C/man7/cpuset.7:1257 build/C/man7/cpuset.7:1262
178 msgid "B<ENAMETOOLONG>"
182 #: build/C/man2/acct.2:97
183 msgid "I<filename> was too long."
187 #: build/C/man2/acct.2:97
193 #: build/C/man2/acct.2:100
194 msgid "The system limit on the total number of open files has been reached."
198 #: build/C/man2/acct.2:100 build/C/man7/cpuset.7:1274 build/C/man7/cpuset.7:1279
204 #: build/C/man2/acct.2:103
205 msgid "The specified filename does not exist."
209 #: build/C/man2/acct.2:103 build/C/man7/cpuset.7:1286 build/C/man2/getgroups.2:127
215 #: build/C/man2/acct.2:106 build/C/man2/getgroups.2:130
216 msgid "Out of memory."
220 #: build/C/man2/acct.2:106 build/C/man2/iopl.2:75
226 #: build/C/man2/acct.2:112
228 "BSD process accounting has not been enabled when the operating system kernel "
229 "was compiled. The kernel configuration parameter controlling this feature "
230 "is B<CONFIG_BSD_PROCESS_ACCT>."
234 #: build/C/man2/acct.2:112 build/C/man7/cpuset.7:1313
240 #: build/C/man2/acct.2:117
241 msgid "A component used as a directory in I<filename> is not in fact a directory."
245 #: build/C/man2/acct.2:117 build/C/man2/capget.2:183 build/C/man2/capget.2:188 build/C/man7/cpuset.7:1318 build/C/man2/getgroups.2:130 build/C/man2/getpriority.2:150 build/C/man2/getrlimit.2:452 build/C/man2/getsid.2:63 build/C/man2/iopl.2:78 build/C/man2/ioprio_set.2:169 build/C/man2/seteuid.2:73 build/C/man2/setgid.2:57 build/C/man2/setpgid.2:206 build/C/man2/setresuid.2:77 build/C/man2/setreuid.2:95 build/C/man2/setsid.2:58 build/C/man2/setuid.2:83 build/C/man3/ulimit.3:75
251 #: build/C/man2/acct.2:123
253 "The calling process has insufficient privilege to enable process "
254 "accounting. On Linux the B<CAP_SYS_PACCT> capability is required."
258 #: build/C/man2/acct.2:123
264 #: build/C/man2/acct.2:127
265 msgid "I<filename> refers to a file on a read-only file system."
269 #: build/C/man2/acct.2:127
275 #: build/C/man2/acct.2:130
276 msgid "There are no more free file structures or we ran out of memory."
280 #: build/C/man2/acct.2:130 build/C/man5/acct.5:152 build/C/man7/capabilities.7:1002 build/C/man2/capget.2:210 build/C/man7/credentials.7:232 build/C/man2/getgid.2:44 build/C/man2/getgroups.2:133 build/C/man2/getpid.2:44 build/C/man2/getpriority.2:158 build/C/man2/getresuid.2:66 build/C/man2/getrlimit.2:473 build/C/man2/getrusage.2:194 build/C/man2/getsid.2:78 build/C/man2/getuid.2:45 build/C/man2/iopl.2:85 build/C/man2/ioprio_set.2:186 build/C/man2/ipc.2:46 build/C/man2/seteuid.2:89 build/C/man2/setfsgid.2:78 build/C/man2/setfsuid.2:78 build/C/man2/setgid.2:74 build/C/man2/setpgid.2:225 build/C/man2/setresuid.2:83 build/C/man2/setreuid.2:111 build/C/man2/setsid.2:64 build/C/man2/setuid.2:90 build/C/man3/ulimit.3:78
282 msgid "CONFORMING TO"
285 #. SVr4 documents an EBUSY error condition, but no EISDIR or ENOSYS.
286 #. Also AIX and HP-UX document EBUSY (attempt is made
287 #. to enable accounting when it is already enabled), as does Solaris
288 #. (attempt is made to enable accounting using the same file that is
289 #. currently being used).
291 #: build/C/man2/acct.2:137
292 msgid "SVr4, 4.3BSD (but not POSIX)."
296 #: build/C/man2/acct.2:137 build/C/man5/acct.5:156 build/C/man7/capabilities.7:1007 build/C/man2/capget.2:212 build/C/man7/cpuset.7:1340 build/C/man7/credentials.7:238 build/C/man2/getgid.2:46 build/C/man2/getgroups.2:141 build/C/man2/getpid.2:46 build/C/man2/getpriority.2:161 build/C/man2/getresuid.2:69 build/C/man2/getrlimit.2:496 build/C/man2/getrusage.2:205 build/C/man2/getsid.2:80 build/C/man2/getuid.2:47 build/C/man2/getuid.2:57 build/C/man2/iopl.2:89 build/C/man2/ioprio_set.2:188 build/C/man2/ipc.2:50 build/C/man2/seteuid.2:91 build/C/man2/setfsgid.2:82 build/C/man2/setfsuid.2:82 build/C/man2/setgid.2:64 build/C/man2/setpgid.2:247 build/C/man2/setresuid.2:86 build/C/man2/setreuid.2:117 build/C/man2/setsid.2:66 build/C/man2/setuid.2:95
302 #: build/C/man2/acct.2:140
304 "No accounting is produced for programs running when a system crash occurs. "
305 "In particular, nonterminating processes are never accounted for."
309 #: build/C/man2/acct.2:143
311 "The structure of the records written to the accounting file is described in "
316 #: build/C/man2/acct.2:143 build/C/man5/acct.5:173 build/C/man7/capabilities.7:1055 build/C/man2/capget.2:219 build/C/man7/cpuset.7:1487 build/C/man7/credentials.7:250 build/C/man2/getgid.2:62 build/C/man2/getgroups.2:171 build/C/man2/getpid.2:98 build/C/man2/getpriority.2:223 build/C/man2/getresuid.2:85 build/C/man2/getrlimit.2:620 build/C/man2/getrusage.2:245 build/C/man2/getsid.2:83 build/C/man2/getuid.2:73 build/C/man2/iopl.2:98 build/C/man2/ioprio_set.2:317 build/C/man2/ipc.2:58 build/C/man2/seteuid.2:117 build/C/man2/setfsgid.2:110 build/C/man2/setfsuid.2:110 build/C/man2/setgid.2:76 build/C/man2/setpgid.2:315 build/C/man2/setresuid.2:106 build/C/man2/setreuid.2:157 build/C/man2/setsid.2:83 build/C/man2/setuid.2:118 build/C/man7/svipc.7:320 build/C/man3/ulimit.3:83
322 #: build/C/man2/acct.2:145
327 #: build/C/man2/acct.2:145 build/C/man5/acct.5:178 build/C/man7/capabilities.7:1076 build/C/man2/capget.2:223 build/C/man7/cpuset.7:1504 build/C/man7/credentials.7:281 build/C/man2/getgid.2:67 build/C/man2/getgroups.2:178 build/C/man2/getpid.2:108 build/C/man2/getpriority.2:231 build/C/man2/getresuid.2:91 build/C/man2/getrlimit.2:637 build/C/man2/getrusage.2:252 build/C/man2/getsid.2:87 build/C/man2/getuid.2:78 build/C/man2/iopl.2:101 build/C/man2/ioprio_set.2:323 build/C/man2/ipc.2:71 build/C/man2/seteuid.2:124 build/C/man2/setfsgid.2:115 build/C/man2/setfsuid.2:115 build/C/man2/setgid.2:82 build/C/man2/setpgid.2:322 build/C/man2/setresuid.2:115 build/C/man2/setreuid.2:165 build/C/man2/setsid.2:89 build/C/man2/setuid.2:125 build/C/man7/svipc.7:334 build/C/man3/ulimit.3:88
333 #: build/C/man2/acct.2:152 build/C/man5/acct.5:185 build/C/man7/capabilities.7:1083 build/C/man2/capget.2:230 build/C/man7/cpuset.7:1511 build/C/man7/credentials.7:288 build/C/man2/getgid.2:74 build/C/man2/getgroups.2:185 build/C/man2/getpid.2:115 build/C/man2/getpriority.2:238 build/C/man2/getresuid.2:98 build/C/man2/getrlimit.2:644 build/C/man2/getrusage.2:259 build/C/man2/getsid.2:94 build/C/man2/getuid.2:85 build/C/man2/iopl.2:108 build/C/man2/ioprio_set.2:330 build/C/man2/ipc.2:78 build/C/man2/seteuid.2:131 build/C/man2/setfsgid.2:122 build/C/man2/setfsuid.2:122 build/C/man2/setgid.2:89 build/C/man2/setpgid.2:329 build/C/man2/setresuid.2:122 build/C/man2/setreuid.2:172 build/C/man2/setsid.2:96 build/C/man2/setuid.2:132 build/C/man7/svipc.7:341 build/C/man3/ulimit.3:95
335 "This page is part of release 3.40 of the Linux I<man-pages> project. A "
336 "description of the project, and information about reporting bugs, can be "
337 "found at http://www.kernel.org/doc/man-pages/."
341 #: build/C/man5/acct.5:23
347 #: build/C/man5/acct.5:26
348 msgid "acct - process accounting file"
352 #: build/C/man5/acct.5:28
353 msgid "B<#include E<lt>sys/acct.hE<gt>>"
357 #: build/C/man5/acct.5:34
359 "If the kernel is built with the process accounting option enabled "
360 "(B<CONFIG_BSD_PROCESS_ACCT>), then calling B<acct>(2) starts process "
361 "accounting, for example:"
365 #: build/C/man5/acct.5:37
366 msgid "acct(\"/var/log/pacct\");"
370 #: build/C/man5/acct.5:45
372 "When process accounting is enabled, the kernel writes a record to the "
373 "accounting file as each process on the system terminates. This record "
374 "contains information about the terminated process, and is defined in "
375 "I<E<lt>sys/acct.hE<gt>> as follows:"
379 #: build/C/man5/acct.5:49
381 msgid "#define ACCT_COMM 16\n"
385 #: build/C/man5/acct.5:51
387 msgid "typedef u_int16_t comp_t;\n"
391 #: build/C/man5/acct.5:75
395 " char ac_flag; /* Accounting flags */\n"
396 " u_int16_t ac_uid; /* Accounting user ID */\n"
397 " u_int16_t ac_gid; /* Accounting group ID */\n"
398 " u_int16_t ac_tty; /* Controlling terminal */\n"
399 " u_int32_t ac_btime; /* Process creation time\n"
400 " (seconds since the Epoch) */\n"
401 " comp_t ac_utime; /* User CPU time */\n"
402 " comp_t ac_stime; /* System CPU time */\n"
403 " comp_t ac_etime; /* Elapsed time */\n"
404 " comp_t ac_mem; /* Average memory usage (kB) */\n"
405 " comp_t ac_io; /* Characters transferred (unused) */\n"
406 " comp_t ac_rw; /* Blocks read or written (unused) */\n"
407 " comp_t ac_minflt; /* Minor page faults */\n"
408 " comp_t ac_majflt; /* Major page faults */\n"
409 " comp_t ac_swaps; /* Number of swaps (unused) */\n"
410 " u_int32_t ac_exitcode; /* Process termination status\n"
411 " (see wait(2)) */\n"
412 " char ac_comm[ACCT_COMM+1];\n"
413 " /* Command name (basename of last\n"
414 " executed command; null-terminated) */\n"
415 " char ac_pad[I<X>]; /* padding bytes */\n"
420 #: build/C/man5/acct.5:82
423 "enum { /* Bits that may be set in ac_flag field */\n"
424 " AFORK = 0x01, /* Has executed fork, but no exec */\n"
425 " ASU = 0x02, /* Used superuser privileges */\n"
426 " ACORE = 0x08, /* Dumped core */\n"
427 " AXSIG = 0x10 /* Killed by a signal */\n"
432 #: build/C/man5/acct.5:92
434 "The I<comp_t> data type is a floating-point value consisting of a 3-bit, "
435 "base-8 exponent, and a 13-bit mantissa. A value, I<c>, of this type can be "
436 "converted to a (long) integer as follows:"
440 #: build/C/man5/acct.5:95
442 msgid " v = (c & 0x1fff) E<lt>E<lt> (((c E<gt>E<gt> 13) & 0x7) * 3);\n"
446 #: build/C/man5/acct.5:105
448 "The I<ac_utime>, I<ac_stime>, and I<ac_etime> fields measure time in \"clock "
449 "ticks\"; divide these values by I<sysconf(_SC_CLK_TCK)> to convert them to "
454 #: build/C/man5/acct.5:105
456 msgid "Version 3 Accounting File Format"
460 #: build/C/man5/acct.5:120
462 "Since kernel 2.6.8, an optional alternative version of the accounting file "
463 "can be produced if the B<CONFIG_BSD_PROCESS_ACCT_V3> option is set when "
464 "building the kernel. With this option is set, the records written to the "
465 "accounting file contain additional fields, and the width of I<c_uid> and "
466 "I<ac_gid> fields is widened from 16 to 32 bits (in line with the increased "
467 "size of UID and GIDs in Linux 2.4 and later). The records are defined as "
472 #: build/C/man5/acct.5:145
476 " char ac_flag; /* Flags */\n"
477 " char ac_version; /* Always set to ACCT_VERSION (3) */\n"
478 " u_int16_t ac_tty; /* Controlling terminal */\n"
479 " u_int32_t ac_exitcode; /* Process termination status */\n"
480 " u_int32_t ac_uid; /* Real user ID */\n"
481 " u_int32_t ac_gid; /* Real group ID */\n"
482 " u_int32_t ac_pid; /* Process ID */\n"
483 " u_int32_t ac_ppid; /* Parent process ID */\n"
484 " u_int32_t ac_btime; /* Process creation time */\n"
485 " float ac_etime; /* Elapsed time */\n"
486 " comp_t ac_utime; /* User CPU time */\n"
487 " comp_t ac_stime; /* System time */\n"
488 " comp_t ac_mem; /* Average memory usage (kB) */\n"
489 " comp_t ac_io; /* Characters transferred (unused) */\n"
490 " comp_t ac_rw; /* Blocks read or written\n"
492 " comp_t ac_minflt; /* Minor page faults */\n"
493 " comp_t ac_majflt; /* Major page faults */\n"
494 " comp_t ac_swaps; /* Number of swaps (unused) */\n"
495 " char ac_comm[ACCT_COMM]; /* Command name */\n"
500 #: build/C/man5/acct.5:148 build/C/man7/cpuset.7:1337 build/C/man2/getresuid.2:59 build/C/man2/getrlimit.2:468 build/C/man2/getsid.2:74 build/C/man2/ioprio_set.2:183 build/C/man2/setfsgid.2:74 build/C/man2/setfsuid.2:74 build/C/man2/setresuid.2:81
506 #: build/C/man5/acct.5:152
507 msgid "The I<acct_v3> structure is defined in glibc since version 2.6."
511 #: build/C/man5/acct.5:156
513 "Process accounting originated on BSD. Although it is present on most "
514 "systems, it is not standardized, and the details vary somewhat between "
519 #: build/C/man5/acct.5:159
521 "Records in the accounting file are ordered by termination time of the "
526 #: build/C/man5/acct.5:166
528 "In kernels up to and including 2.6.9, a separate accounting record is "
529 "written for each thread created using the NPTL threading library; since "
530 "Linux 2.6.10, a single accounting record is written for the entire process "
531 "on termination of the last thread in the process."
535 #: build/C/man5/acct.5:173
537 "The I<proc/sys/kernel/acct> file, described in B<proc>(5), defines settings "
538 "that control the behavior of process accounting when disk space runs low."
542 #: build/C/man5/acct.5:178
543 msgid "B<lastcomm>(1), B<acct>(2), B<accton>(8), B<sa>(8)"
547 #: build/C/man7/capabilities.7:46
553 #: build/C/man7/capabilities.7:46
559 #: build/C/man7/capabilities.7:49
560 msgid "capabilities - overview of Linux capabilities"
564 #: build/C/man7/capabilities.7:61
566 "For the purpose of performing permission checks, traditional UNIX "
567 "implementations distinguish two categories of processes: I<privileged> "
568 "processes (whose effective user ID is 0, referred to as superuser or root), "
569 "and I<unprivileged> processes (whose effective UID is nonzero). Privileged "
570 "processes bypass all kernel permission checks, while unprivileged processes "
571 "are subject to full permission checking based on the process's credentials "
572 "(usually: effective UID, effective GID, and supplementary group list)."
576 #: build/C/man7/capabilities.7:68
578 "Starting with kernel 2.2, Linux divides the privileges traditionally "
579 "associated with superuser into distinct units, known as I<capabilities>, "
580 "which can be independently enabled and disabled. Capabilities are a "
581 "per-thread attribute."
585 #: build/C/man7/capabilities.7:68
587 msgid "Capabilities List"
591 #: build/C/man7/capabilities.7:71
593 "The following list shows the capabilities implemented on Linux, and the "
594 "operations or behaviors that each capability permits:"
598 #: build/C/man7/capabilities.7:71
600 msgid "B<CAP_AUDIT_CONTROL> (since Linux 2.6.11)"
604 #: build/C/man7/capabilities.7:75
606 "Enable and disable kernel auditing; change auditing filter rules; retrieve "
607 "auditing status and filtering rules."
611 #: build/C/man7/capabilities.7:75
613 msgid "B<CAP_AUDIT_WRITE> (since Linux 2.6.11)"
617 #: build/C/man7/capabilities.7:78
618 msgid "Write records to kernel auditing log."
622 #: build/C/man7/capabilities.7:78
628 #: build/C/man7/capabilities.7:82
629 msgid "Make arbitrary changes to file UIDs and GIDs (see B<chown>(2))."
633 #: build/C/man7/capabilities.7:82
635 msgid "B<CAP_DAC_OVERRIDE>"
639 #: build/C/man7/capabilities.7:86
641 "Bypass file read, write, and execute permission checks. (DAC is an "
642 "abbreviation of \"discretionary access control\".)"
646 #: build/C/man7/capabilities.7:86
648 msgid "B<CAP_DAC_READ_SEARCH>"
652 #: build/C/man7/capabilities.7:90
654 "Bypass file read permission checks and directory read and execute permission "
659 #: build/C/man7/capabilities.7:90
661 msgid "B<CAP_FOWNER>"
665 #: build/C/man7/capabilities.7:94 build/C/man7/capabilities.7:104 build/C/man7/capabilities.7:108 build/C/man7/capabilities.7:110 build/C/man7/capabilities.7:112 build/C/man7/capabilities.7:182 build/C/man7/capabilities.7:184 build/C/man7/capabilities.7:186 build/C/man7/capabilities.7:188 build/C/man7/capabilities.7:190 build/C/man7/capabilities.7:192 build/C/man7/capabilities.7:194 build/C/man7/capabilities.7:196 build/C/man7/capabilities.7:198 build/C/man7/capabilities.7:222 build/C/man7/capabilities.7:224 build/C/man7/capabilities.7:270 build/C/man7/capabilities.7:280 build/C/man7/capabilities.7:286 build/C/man7/capabilities.7:291 build/C/man7/capabilities.7:297 build/C/man7/capabilities.7:304 build/C/man7/capabilities.7:307 build/C/man7/capabilities.7:315 build/C/man7/capabilities.7:317 build/C/man7/capabilities.7:326 build/C/man7/capabilities.7:333 build/C/man7/capabilities.7:336 build/C/man7/capabilities.7:340 build/C/man7/capabilities.7:343 build/C/man7/capabilities.7:346 build/C/man7/capabilities.7:353 build/C/man7/capabilities.7:358 build/C/man7/capabilities.7:364 build/C/man7/capabilities.7:368 build/C/man7/capabilities.7:372 build/C/man7/capabilities.7:376 build/C/man7/capabilities.7:380 build/C/man7/capabilities.7:407 build/C/man7/capabilities.7:412 build/C/man7/capabilities.7:417 build/C/man7/capabilities.7:420 build/C/man7/capabilities.7:423 build/C/man7/capabilities.7:432 build/C/man7/capabilities.7:436 build/C/man7/capabilities.7:472 build/C/man7/capabilities.7:474 build/C/man7/capabilities.7:478 build/C/man7/capabilities.7:480 build/C/man7/capabilities.7:483 build/C/man7/capabilities.7:487 build/C/man7/capabilities.7:489 build/C/man7/capabilities.7:491 build/C/man7/capabilities.7:493 build/C/man7/capabilities.7:502 build/C/man7/capabilities.7:509 build/C/man7/capabilities.7:514 build/C/man7/capabilities.7:519 build/C/man7/capabilities.7:729 build/C/man7/capabilities.7:737 build/C/man7/capabilities.7:1044 build/C/man7/capabilities.7:1049 build/C/man7/cpuset.7:539 build/C/man7/cpuset.7:544 build/C/man7/cpuset.7:549 build/C/man7/cpuset.7:725 build/C/man7/cpuset.7:729 build/C/man7/cpuset.7:926 build/C/man7/cpuset.7:929 build/C/man7/cpuset.7:933 build/C/man7/cpuset.7:937 build/C/man7/cpuset.7:941 build/C/man7/credentials.7:123 build/C/man7/credentials.7:129 build/C/man7/credentials.7:141 build/C/man7/credentials.7:163 build/C/man7/credentials.7:180 build/C/man7/credentials.7:212 build/C/man7/credentials.7:215 build/C/man7/credentials.7:225 build/C/man7/credentials.7:228
671 #: build/C/man7/capabilities.7:104
673 "Bypass permission checks on operations that normally require the file system "
674 "UID of the process to match the UID of the file (e.g., B<chmod>(2), "
675 "B<utime>(2)), excluding those operations covered by B<CAP_DAC_OVERRIDE> and "
676 "B<CAP_DAC_READ_SEARCH>;"
680 #: build/C/man7/capabilities.7:108
681 msgid "set extended file attributes (see B<chattr>(1)) on arbitrary files;"
685 #: build/C/man7/capabilities.7:110
686 msgid "set Access Control Lists (ACLs) on arbitrary files;"
690 #: build/C/man7/capabilities.7:112
691 msgid "ignore directory sticky bit on file deletion;"
695 #: build/C/man7/capabilities.7:119
696 msgid "specify B<O_NOATIME> for arbitrary files in B<open>(2) and B<fcntl>(2)."
700 #: build/C/man7/capabilities.7:121
702 msgid "B<CAP_FSETID>"
706 #: build/C/man7/capabilities.7:127
708 "Don't clear set-user-ID and set-group-ID permission bits when a file is "
709 "modified; set the set-group-ID bit for a file whose GID does not match the "
710 "file system or any of the supplementary GIDs of the calling process."
714 #: build/C/man7/capabilities.7:127
716 msgid "B<CAP_IPC_LOCK>"
719 #. FIXME As at Linux 3.2, there are some strange uses of this capability
720 #. in other places; they probably should be replaced with something else.
722 #: build/C/man7/capabilities.7:136
723 msgid "Lock memory (B<mlock>(2), B<mlockall>(2), B<mmap>(2), B<shmctl>(2))."
727 #: build/C/man7/capabilities.7:136
729 msgid "B<CAP_IPC_OWNER>"
733 #: build/C/man7/capabilities.7:139
734 msgid "Bypass permission checks for operations on System V IPC objects."
738 #: build/C/man7/capabilities.7:139
743 #. FIXME CAP_KILL also has an effect for threads + setting child
744 #. termination signal to other than SIGCHLD: without this
745 #. capability, the termination signal reverts to SIGCHLD
746 #. if the child does an exec(). What is the rationale
749 #: build/C/man7/capabilities.7:152
751 "Bypass permission checks for sending signals (see B<kill>(2)). This "
752 "includes use of the B<ioctl>(2) B<KDSIGACCEPT> operation."
756 #: build/C/man7/capabilities.7:152
758 msgid "B<CAP_LEASE> (since Linux 2.4)"
762 #: build/C/man7/capabilities.7:156
763 msgid "Establish leases on arbitrary files (see B<fcntl>(2))."
767 #: build/C/man7/capabilities.7:156
769 msgid "B<CAP_LINUX_IMMUTABLE>"
772 #. These attributes are now available on ext2, ext3, Reiserfs, XFS, JFS
774 #: build/C/man7/capabilities.7:165
776 "Set the B<FS_APPEND_FL> and B<FS_IMMUTABLE_FL> i-node flags (see "
781 #: build/C/man7/capabilities.7:165
783 msgid "B<CAP_MAC_ADMIN> (since Linux 2.6.25)"
787 #: build/C/man7/capabilities.7:169
789 "Override Mandatory Access Control (MAC). Implemented for the Smack Linux "
790 "Security Module (LSM)."
794 #: build/C/man7/capabilities.7:169
796 msgid "B<CAP_MAC_OVERRIDE> (since Linux 2.6.25)"
800 #: build/C/man7/capabilities.7:173
801 msgid "Allow MAC configuration or state changes. Implemented for the Smack LSM."
805 #: build/C/man7/capabilities.7:173
807 msgid "B<CAP_MKNOD> (since Linux 2.4)"
811 #: build/C/man7/capabilities.7:177
812 msgid "Create special files using B<mknod>(2)."
816 #: build/C/man7/capabilities.7:177
818 msgid "B<CAP_NET_ADMIN>"
822 #: build/C/man7/capabilities.7:180
823 msgid "Perform various network-related operations:"
827 #: build/C/man7/capabilities.7:184
828 msgid "interface configuration;"
832 #: build/C/man7/capabilities.7:186
833 msgid "administration of IP firewall, masquerading, and accounting"
837 #: build/C/man7/capabilities.7:188
838 msgid "modify routing tables;"
842 #: build/C/man7/capabilities.7:190
843 msgid "bind to any address for transparent proxying;"
847 #: build/C/man7/capabilities.7:192
848 msgid "set type-of-service (TOS)"
852 #: build/C/man7/capabilities.7:194
853 msgid "clear driver statistics;"
857 #: build/C/man7/capabilities.7:196
858 msgid "set promiscuous mode;"
862 #: build/C/man7/capabilities.7:198
863 msgid "enabling multicasting;"
867 #: build/C/man7/capabilities.7:209
869 "use B<setsockopt>(2) to set the following socket options: B<SO_DEBUG>, "
870 "B<SO_MARK>, B<SO_PRIORITY> (for a priority outside the range 0 to 6), "
871 "B<SO_RCVBUFFORCE>, and B<SO_SNDBUFFORCE>."
875 #: build/C/man7/capabilities.7:211
877 msgid "B<CAP_NET_BIND_SERVICE>"
881 #: build/C/man7/capabilities.7:215
883 "Bind a socket to Internet domain privileged ports (port numbers less than "
888 #: build/C/man7/capabilities.7:215
890 msgid "B<CAP_NET_BROADCAST>"
894 #: build/C/man7/capabilities.7:218
895 msgid "(Unused) Make socket broadcasts, and listen to multicasts."
899 #: build/C/man7/capabilities.7:218
901 msgid "B<CAP_NET_RAW>"
905 #: build/C/man7/capabilities.7:224
906 msgid "use RAW and PACKET sockets;"
910 #: build/C/man7/capabilities.7:226
911 msgid "bind to any address for transparent proxying."
915 #: build/C/man7/capabilities.7:229
917 msgid "B<CAP_SETGID>"
921 #: build/C/man7/capabilities.7:233
923 "Make arbitrary manipulations of process GIDs and supplementary GID list; "
924 "forge GID when passing socket credentials via UNIX domain sockets."
928 #: build/C/man7/capabilities.7:233
930 msgid "B<CAP_SETFCAP> (since Linux 2.6.24)"
934 #: build/C/man7/capabilities.7:236
935 msgid "Set file capabilities."
939 #: build/C/man7/capabilities.7:236
941 msgid "B<CAP_SETPCAP>"
945 #: build/C/man7/capabilities.7:247
947 "If file capabilities are not supported: grant or remove any capability in "
948 "the caller's permitted capability set to or from any other process. (This "
949 "property of B<CAP_SETPCAP> is not available when the kernel is configured to "
950 "support file capabilities, since B<CAP_SETPCAP> has entirely different "
951 "semantics for such kernels.)"
955 #: build/C/man7/capabilities.7:257
957 "If file capabilities are supported: add any capability from the calling "
958 "thread's bounding set to its inheritable set; drop capabilities from the "
959 "bounding set (via B<prctl>(2) B<PR_CAPBSET_DROP>); make changes to the "
960 "I<securebits> flags."
964 #: build/C/man7/capabilities.7:257
966 msgid "B<CAP_SETUID>"
969 #. FIXME CAP_SETUID also an effect in exec(); document this.
971 #: build/C/man7/capabilities.7:266
973 "Make arbitrary manipulations of process UIDs (B<setuid>(2), B<setreuid>(2), "
974 "B<setresuid>(2), B<setfsuid>(2)); make forged UID when passing socket "
975 "credentials via UNIX domain sockets."
979 #: build/C/man7/capabilities.7:266
981 msgid "B<CAP_SYS_ADMIN>"
985 #: build/C/man7/capabilities.7:280
987 "Perform a range of system administration operations including: "
988 "B<quotactl>(2), B<mount>(2), B<umount>(2), B<swapon>(2), B<swapoff>(2), "
989 "B<sethostname>(2), and B<setdomainname>(2);"
993 #: build/C/man7/capabilities.7:286
995 "perform privileged B<syslog>(2) operations (since Linux 2.6.37, "
996 "B<CAP_SYSLOG> should be used to permit such operations);"
1000 #: build/C/man7/capabilities.7:291
1001 msgid "perform B<VM86_REQUEST_IRQ> B<vm86>(2) command;"
1005 #: build/C/man7/capabilities.7:297
1007 "perform B<IPC_SET> and B<IPC_RMID> operations on arbitrary System V IPC "
1012 #: build/C/man7/capabilities.7:304
1014 "perform operations on I<trusted> and I<security> Extended Attributes (see "
1019 #: build/C/man7/capabilities.7:307
1020 msgid "use B<lookup_dcookie>(2);"
1024 #: build/C/man7/capabilities.7:315
1026 "use B<ioprio_set>(2) to assign B<IOPRIO_CLASS_RT> and (before Linux 2.6.25) "
1027 "B<IOPRIO_CLASS_IDLE> I/O scheduling classes;"
1031 #: build/C/man7/capabilities.7:317
1032 msgid "forge UID when passing socket credentials;"
1036 #: build/C/man7/capabilities.7:326
1038 "exceed I</proc/sys/fs/file-max>, the system-wide limit on the number of open "
1039 "files, in system calls that open files (e.g., B<accept>(2), B<execve>(2), "
1040 "B<open>(2), B<pipe>(2));"
1044 #: build/C/man7/capabilities.7:333
1046 "employ B<CLONE_*> flags that create new namespaces with B<clone>(2) and "
1051 #: build/C/man7/capabilities.7:336
1052 msgid "call B<perf_event_open>(2);"
1056 #: build/C/man7/capabilities.7:340
1057 msgid "access privileged I<perf> event information;"
1061 #: build/C/man7/capabilities.7:343
1062 msgid "call B<setns>(2);"
1066 #: build/C/man7/capabilities.7:346
1067 msgid "call B<fanotify_init>(2);"
1071 #: build/C/man7/capabilities.7:353
1072 msgid "perform B<KEYCTL_CHOWN> and B<KEYCTL_SETPERM> B<keyctl>(2) operations;"
1076 #: build/C/man7/capabilities.7:358
1077 msgid "perform B<madvise>(2) B<MADV_HWPOISON> operation;"
1081 #: build/C/man7/capabilities.7:364
1083 "employ the B<TIOCSTI> B<ioctl>(2) to insert characters into the input queue "
1084 "of a terminal other than the caller's controlling terminal."
1088 #: build/C/man7/capabilities.7:368
1089 msgid "employ the obsolete B<nfsservctl>(2); system call;"
1093 #: build/C/man7/capabilities.7:372
1094 msgid "employ the obsolete B<bdflush>(2) system call;"
1098 #: build/C/man7/capabilities.7:376
1099 msgid "perform various privileged block-device B<ioctl>(2) operations;"
1103 #: build/C/man7/capabilities.7:380
1104 msgid "perform various privileged file-system B<ioctl>(2) operations;"
1108 #: build/C/man7/capabilities.7:382
1109 msgid "perform administrative operations on many device drivers."
1113 #: build/C/man7/capabilities.7:384
1115 msgid "B<CAP_SYS_BOOT>"
1119 #: build/C/man7/capabilities.7:390
1120 msgid "Use B<reboot>(2) and B<kexec_load>(2)."
1124 #: build/C/man7/capabilities.7:390
1126 msgid "B<CAP_SYS_CHROOT>"
1130 #: build/C/man7/capabilities.7:394
1131 msgid "Use B<chroot>(2)."
1135 #: build/C/man7/capabilities.7:394
1137 msgid "B<CAP_SYS_MODULE>"
1141 #: build/C/man7/capabilities.7:403
1143 "Load and unload kernel modules (see B<init_module>(2) and "
1144 "B<delete_module>(2)); in kernels before 2.6.25: drop capabilities from the "
1145 "system-wide capability bounding set."
1149 #: build/C/man7/capabilities.7:403
1151 msgid "B<CAP_SYS_NICE>"
1155 #: build/C/man7/capabilities.7:412
1157 "Raise process nice value (B<nice>(2), B<setpriority>(2)) and change the "
1158 "nice value for arbitrary processes;"
1162 #: build/C/man7/capabilities.7:417
1164 "set real-time scheduling policies for calling process, and set scheduling "
1165 "policies and priorities for arbitrary processes (B<sched_setscheduler>(2), "
1166 "B<sched_setparam>(2));"
1170 #: build/C/man7/capabilities.7:420
1171 msgid "set CPU affinity for arbitrary processes (B<sched_setaffinity>(2));"
1175 #: build/C/man7/capabilities.7:423
1177 "set I/O scheduling class and priority for arbitrary processes "
1178 "(B<ioprio_set>(2));"
1181 #. FIXME CAP_SYS_NICE also has the following effect for
1182 #. migrate_pages(2):
1183 #. do_migrate_pages(mm, &old, &new,
1184 #. capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE);
1186 #: build/C/man7/capabilities.7:432
1188 "apply B<migrate_pages>(2) to arbitrary processes and allow processes to be "
1189 "migrated to arbitrary nodes;"
1193 #: build/C/man7/capabilities.7:436
1194 msgid "apply B<move_pages>(2) to arbitrary processes;"
1198 #: build/C/man7/capabilities.7:443
1199 msgid "use the B<MPOL_MF_MOVE_ALL> flag with B<mbind>(2) and B<move_pages>(2)."
1203 #: build/C/man7/capabilities.7:445
1205 msgid "B<CAP_SYS_PACCT>"
1209 #: build/C/man7/capabilities.7:449
1210 msgid "Use B<acct>(2)."
1214 #: build/C/man7/capabilities.7:449
1216 msgid "B<CAP_SYS_PTRACE>"
1220 #: build/C/man7/capabilities.7:456
1222 "Trace arbitrary processes using B<ptrace>(2); apply B<get_robust_list>(2) "
1223 "to arbitrary processes."
1227 #: build/C/man7/capabilities.7:456
1229 msgid "B<CAP_SYS_RAWIO>"
1233 #: build/C/man7/capabilities.7:468
1235 "Perform I/O port operations (B<iopl>(2) and B<ioperm>(2)); access "
1236 "I</proc/kcore>; employ the B<FIBMAP> B<ioctl>(2) operation."
1240 #: build/C/man7/capabilities.7:468
1242 msgid "B<CAP_SYS_RESOURCE>"
1246 #: build/C/man7/capabilities.7:474
1247 msgid "Use reserved space on ext2 file systems;"
1251 #: build/C/man7/capabilities.7:478
1252 msgid "make B<ioctl>(2) calls controlling ext3 journaling;"
1256 #: build/C/man7/capabilities.7:480
1257 msgid "override disk quota limits;"
1261 #: build/C/man7/capabilities.7:483
1262 msgid "increase resource limits (see B<setrlimit>(2));"
1266 #: build/C/man7/capabilities.7:487
1267 msgid "override B<RLIMIT_NPROC> resource limit;"
1271 #: build/C/man7/capabilities.7:489
1272 msgid "override maximum number of consoles on console allocation;"
1276 #: build/C/man7/capabilities.7:491
1277 msgid "override maximum number of keymaps;"
1281 #: build/C/man7/capabilities.7:493
1282 msgid "allow more than 64hz interrupts from the real-time clock;"
1286 #: build/C/man7/capabilities.7:502
1288 "raise I<msg_qbytes> limit for a System V message queue above the limit in "
1289 "I</proc/sys/kernel/msgmnb> (see B<msgop>(2) and B<msgctl>(2));"
1293 #: build/C/man7/capabilities.7:509
1295 "override the I</proc/sys/fs/pipe-size-max> limit when setting the capacity "
1296 "of a pipe using the B<F_SETPIPE_SZ> B<fcntl>(2) command."
1300 #: build/C/man7/capabilities.7:514
1302 "use B<F_SETPIPE_SZ> to increase the capacity of a pipe above the limit "
1303 "specified by I</proc/sys/fs/pipe-max-size>;"
1307 #: build/C/man7/capabilities.7:519
1309 "override I</proc/sys/fs/mqueue/queues_max> limit when creating POSIX message "
1310 "queues (see B<mq_overview>(7));"
1314 #: build/C/man7/capabilities.7:524
1315 msgid "employ B<prctl>(2) B<PR_SET_MM> operation."
1319 #: build/C/man7/capabilities.7:526
1321 msgid "B<CAP_SYS_TIME>"
1325 #: build/C/man7/capabilities.7:533
1327 "Set system clock (B<settimeofday>(2), B<stime>(2), B<adjtimex>(2)); set "
1328 "real-time (hardware) clock."
1332 #: build/C/man7/capabilities.7:533
1334 msgid "B<CAP_SYS_TTY_CONFIG>"
1338 #: build/C/man7/capabilities.7:540
1340 "Use B<vhangup>(2); employ various privileged B<ioctl>(2) operations on "
1341 "virtual terminals."
1345 #: build/C/man7/capabilities.7:540
1347 msgid "B<CAP_SYSLOG> (since Linux 2.6.37)"
1351 #: build/C/man7/capabilities.7:548
1353 "Perform privileged B<syslog>(2) operations. See B<syslog>(2) for "
1354 "information on which operations require privilege."
1358 #: build/C/man7/capabilities.7:548
1360 msgid "B<CAP_WAKE_ALARM> (since Linux 3.0)"
1364 #: build/C/man7/capabilities.7:556
1366 "Trigger something that will wake up the system (set B<CLOCK_REALTIME_ALARM> "
1367 "and B<CLOCK_BOOTTIME_ALARM> timers)."
1371 #: build/C/man7/capabilities.7:556
1373 msgid "Past and Current Implementation"
1377 #: build/C/man7/capabilities.7:558
1378 msgid "A full implementation of capabilities requires that:"
1382 #: build/C/man7/capabilities.7:558 build/C/man7/capabilities.7:701 build/C/man7/capabilities.7:848 build/C/man7/capabilities.7:901
1388 #: build/C/man7/capabilities.7:562
1390 "For all privileged operations, the kernel must check whether the thread has "
1391 "the required capability in its effective set."
1395 #: build/C/man7/capabilities.7:562 build/C/man7/capabilities.7:706 build/C/man7/capabilities.7:854 build/C/man7/capabilities.7:907
1401 #: build/C/man7/capabilities.7:565
1403 "The kernel must provide system calls allowing a thread's capability sets to "
1404 "be changed and retrieved."
1408 #: build/C/man7/capabilities.7:565 build/C/man7/capabilities.7:857 build/C/man7/capabilities.7:911
1414 #: build/C/man7/capabilities.7:568
1416 "The file system must support attaching capabilities to an executable file, "
1417 "so that a process gains those capabilities when the file is executed."
1421 #: build/C/man7/capabilities.7:572
1423 "Before kernel 2.6.24, only the first two of these requirements are met; "
1424 "since kernel 2.6.24, all three requirements are met."
1428 #: build/C/man7/capabilities.7:572
1430 msgid "Thread Capability Sets"
1434 #: build/C/man7/capabilities.7:575
1436 "Each thread has three capability sets containing zero or more of the above "
1441 #: build/C/man7/capabilities.7:575
1443 msgid "I<Permitted>:"
1447 #: build/C/man7/capabilities.7:583
1449 "This is a limiting superset for the effective capabilities that the thread "
1450 "may assume. It is also a limiting superset for the capabilities that may be "
1451 "added to the inheritable set by a thread that does not have the "
1452 "B<CAP_SETPCAP> capability in its effective set."
1456 #: build/C/man7/capabilities.7:589
1458 "If a thread drops a capability from its permitted set, it can never "
1459 "reacquire that capability (unless it B<execve>(2)s either a set-user-ID-root "
1460 "program, or a program whose associated file capabilities grant that "
1465 #: build/C/man7/capabilities.7:589
1467 msgid "I<Inheritable>:"
1471 #: build/C/man7/capabilities.7:596
1473 "This is a set of capabilities preserved across an B<execve>(2). It provides "
1474 "a mechanism for a process to assign capabilities to the permitted set of the "
1475 "new program during an B<execve>(2)."
1479 #: build/C/man7/capabilities.7:596 build/C/man7/capabilities.7:638
1481 msgid "I<Effective>:"
1485 #: build/C/man7/capabilities.7:600
1487 "This is the set of capabilities used by the kernel to perform permission "
1488 "checks for the thread."
1492 #: build/C/man7/capabilities.7:606
1494 "A child created via B<fork>(2) inherits copies of its parent's capability "
1495 "sets. See below for a discussion of the treatment of capabilities during "
1500 #: build/C/man7/capabilities.7:611
1502 "Using B<capset>(2), a thread may manipulate its own capability sets (see "
1507 #: build/C/man7/capabilities.7:611
1509 msgid "File Capabilities"
1513 #: build/C/man7/capabilities.7:626
1515 "Since kernel 2.6.24, the kernel supports associating capability sets with an "
1516 "executable file using B<setcap>(8). The file capability sets are stored in "
1517 "an extended attribute (see B<setxattr>(2)) named I<security.capability>. "
1518 "Writing to this extended attribute requires the B<CAP_SETFCAP> capability. "
1519 "The file capability sets, in conjunction with the capability sets of the "
1520 "thread, determine the capabilities of a thread after an B<execve>(2)."
1524 #: build/C/man7/capabilities.7:628
1525 msgid "The three file capability sets are:"
1529 #: build/C/man7/capabilities.7:628
1531 msgid "I<Permitted> (formerly known as I<forced>):"
1535 #: build/C/man7/capabilities.7:632
1537 "These capabilities are automatically permitted to the thread, regardless of "
1538 "the thread's inheritable capabilities."
1542 #: build/C/man7/capabilities.7:632
1544 msgid "I<Inheritable> (formerly known as I<allowed>):"
1548 #: build/C/man7/capabilities.7:638
1550 "This set is ANDed with the thread's inheritable set to determine which "
1551 "inheritable capabilities are enabled in the permitted set of the thread "
1552 "after the B<execve>(2)."
1556 #: build/C/man7/capabilities.7:648
1558 "This is not a set, but rather just a single bit. If this bit is set, then "
1559 "during an B<execve>(2) all of the new permitted capabilities for the thread "
1560 "are also raised in the effective set. If this bit is not set, then after an "
1561 "B<execve>(2), none of the new permitted capabilities is in the new effective "
1566 #: build/C/man7/capabilities.7:664
1568 "Enabling the file effective capability bit implies that any file permitted "
1569 "or inheritable capability that causes a thread to acquire the corresponding "
1570 "permitted capability during an B<execve>(2) (see the transformation rules "
1571 "described below) will also acquire that capability in its effective set. "
1572 "Therefore, when assigning capabilities to a file (B<setcap>(8), "
1573 "B<cap_set_file>(3), B<cap_set_fd>(3)), if we specify the effective flag as "
1574 "being enabled for any capability, then the effective flag must also be "
1575 "specified as enabled for all other capabilities for which the corresponding "
1576 "permitted or inheritable flags is enabled."
1580 #: build/C/man7/capabilities.7:664
1582 msgid "Transformation of Capabilities During execve()"
1586 #: build/C/man7/capabilities.7:670
1588 "During an B<execve>(2), the kernel calculates the new capabilities of the "
1589 "process using the following algorithm:"
1593 #: build/C/man7/capabilities.7:675
1596 "P'(permitted) = (P(inheritable) & F(inheritable)) |\n"
1597 " (F(permitted) & cap_bset)\n"
1601 #: build/C/man7/capabilities.7:677
1603 msgid "P'(effective) = F(effective) ? P'(permitted) : 0\n"
1607 #: build/C/man7/capabilities.7:679
1609 msgid "P'(inheritable) = P(inheritable) [i.e., unchanged]\n"
1613 #: build/C/man7/capabilities.7:683
1618 #: build/C/man7/capabilities.7:684
1624 #: build/C/man7/capabilities.7:687
1625 msgid "denotes the value of a thread capability set before the B<execve>(2)"
1629 #: build/C/man7/capabilities.7:687
1635 #: build/C/man7/capabilities.7:690
1636 msgid "denotes the value of a capability set after the B<execve>(2)"
1640 #: build/C/man7/capabilities.7:690
1646 #: build/C/man7/capabilities.7:692
1647 msgid "denotes a file capability set"
1651 #: build/C/man7/capabilities.7:692
1657 #: build/C/man7/capabilities.7:694
1658 msgid "is the value of the capability bounding set (described below)."
1662 #: build/C/man7/capabilities.7:696
1664 msgid "Capabilities and execution of programs by root"
1668 #: build/C/man7/capabilities.7:701
1670 "In order to provide an all-powerful I<root> using capability sets, during an "
1675 #: build/C/man7/capabilities.7:706
1677 "If a set-user-ID-root program is being executed, or the real user ID of the "
1678 "process is 0 (root) then the file inheritable and permitted sets are "
1679 "defined to be all ones (i.e., all capabilities enabled)."
1683 #: build/C/man7/capabilities.7:709
1685 "If a set-user-ID-root program is being executed, then the file effective bit "
1686 "is defined to be one (enabled)."
1689 #. If a process with real UID 0, and nonzero effective UID does an
1690 #. exec(), then it gets all capabilities in its
1691 #. permitted set, and no effective capabilities
1693 #: build/C/man7/capabilities.7:724
1695 "The upshot of the above rules, combined with the capabilities "
1696 "transformations described above, is that when a process B<execve>(2)s a "
1697 "set-user-ID-root program, or when a process with an effective UID of 0 "
1698 "B<execve>(2)s a program, it gains all capabilities in its permitted and "
1699 "effective capability sets, except those masked out by the capability "
1700 "bounding set. This provides semantics that are the same as those provided "
1701 "by traditional UNIX systems."
1705 #: build/C/man7/capabilities.7:724
1707 msgid "Capability bounding set"
1711 #: build/C/man7/capabilities.7:729
1713 "The capability bounding set is a security mechanism that can be used to "
1714 "limit the capabilities that can be gained during an B<execve>(2). The "
1715 "bounding set is used in the following ways:"
1719 #: build/C/man7/capabilities.7:737
1721 "During an B<execve>(2), the capability bounding set is ANDed with the file "
1722 "permitted capability set, and the result of this operation is assigned to "
1723 "the thread's permitted capability set. The capability bounding set thus "
1724 "places a limit on the permitted capabilities that may be granted by an "
1729 #: build/C/man7/capabilities.7:749
1731 "(Since Linux 2.6.25) The capability bounding set acts as a limiting "
1732 "superset for the capabilities that a thread can add to its inheritable set "
1733 "using B<capset>(2). This means that if a capability is not in the bounding "
1734 "set, then a thread can't add this capability to its inheritable set, even if "
1735 "it was in its permitted capabilities, and thereby cannot have this "
1736 "capability preserved in its permitted set when it B<execve>(2)s a file that "
1737 "has the capability in its inheritable set."
1741 #: build/C/man7/capabilities.7:756
1743 "Note that the bounding set masks the file permitted capabilities, but not "
1744 "the inherited capabilities. If a thread maintains a capability in its "
1745 "inherited set that is not in its bounding set, then it can still gain that "
1746 "capability in its permitted set by executing a file that has the capability "
1747 "in its inherited set."
1751 #: build/C/man7/capabilities.7:759
1753 "Depending on the kernel version, the capability bounding set is either a "
1754 "system-wide attribute, or a per-process attribute."
1758 #: build/C/man7/capabilities.7:761
1759 msgid "B<Capability bounding set prior to Linux 2.6.25>"
1763 #: build/C/man7/capabilities.7:769
1765 "In kernels before 2.6.25, the capability bounding set is a system-wide "
1766 "attribute that affects all threads on the system. The bounding set is "
1767 "accessible via the file I</proc/sys/kernel/cap-bound>. (Confusingly, this "
1768 "bit mask parameter is expressed as a signed decimal number in "
1769 "I</proc/sys/kernel/cap-bound>.)"
1773 #: build/C/man7/capabilities.7:776
1775 "Only the B<init> process may set capabilities in the capability bounding "
1776 "set; other than that, the superuser (more precisely: programs with the "
1777 "B<CAP_SYS_MODULE> capability) may only clear capabilities from this set."
1781 #: build/C/man7/capabilities.7:785
1783 "On a standard system the capability bounding set always masks out the "
1784 "B<CAP_SETPCAP> capability. To remove this restriction (dangerous!), modify "
1785 "the definition of B<CAP_INIT_EFF_SET> in I<include/linux/capability.h> and "
1786 "rebuild the kernel."
1790 #: build/C/man7/capabilities.7:789
1792 "The system-wide capability bounding set feature was added to Linux starting "
1793 "with kernel version 2.2.11."
1797 #: build/C/man7/capabilities.7:791
1798 msgid "B<Capability bounding set from Linux 2.6.25 onward>"
1802 #: build/C/man7/capabilities.7:796
1804 "From Linux 2.6.25, the I<capability bounding set> is a per-thread "
1805 "attribute. (There is no longer a system-wide capability bounding set.)"
1809 #: build/C/man7/capabilities.7:801
1811 "The bounding set is inherited at B<fork>(2) from the thread's parent, and "
1812 "is preserved across an B<execve>(2)."
1816 #: build/C/man7/capabilities.7:814
1818 "A thread may remove capabilities from its capability bounding set using the "
1819 "B<prctl>(2) B<PR_CAPBSET_DROP> operation, provided it has the "
1820 "B<CAP_SETPCAP> capability. Once a capability has been dropped from the "
1821 "bounding set, it cannot be restored to that set. A thread can determine if "
1822 "a capability is in its bounding set using the B<prctl>(2) "
1823 "B<PR_CAPBSET_READ> operation."
1827 #: build/C/man7/capabilities.7:832
1829 "Removing capabilities from the bounding set is only supported if file "
1830 "capabilities are compiled into the kernel. In kernels before Linux 2.6.33, "
1831 "file capabilities were an optional feature configurable via the "
1832 "CONFIG_SECURITY_FILE_CAPABILITIES option. Since Linux 2.6.33, the "
1833 "configuration option has been removed and file capabilities are always part "
1834 "of the kernel. When file capabilities are compiled into the kernel, the "
1835 "B<init> process (the ancestor of all processes) begins with a full bounding "
1836 "set. If file capabilities are not compiled into the kernel, then B<init> "
1837 "begins with a full bounding set minus B<CAP_SETPCAP>, because this "
1838 "capability has a different meaning when there are no file capabilities."
1842 #: build/C/man7/capabilities.7:839
1844 "Removing a capability from the bounding set does not remove it from the "
1845 "thread's inherited set. However it does prevent the capability from being "
1846 "added back into the thread's inherited set in the future."
1850 #: build/C/man7/capabilities.7:839
1852 msgid "Effect of User ID Changes on Capabilities"
1856 #: build/C/man7/capabilities.7:848
1858 "To preserve the traditional semantics for transitions between 0 and nonzero "
1859 "user IDs, the kernel makes the following changes to a thread's capability "
1860 "sets on changes to the thread's real, effective, saved set, and file system "
1861 "user IDs (using B<setuid>(2), B<setresuid>(2), or similar):"
1865 #: build/C/man7/capabilities.7:854
1867 "If one or more of the real, effective or saved set user IDs was previously "
1868 "0, and as a result of the UID changes all of these IDs have a nonzero value, "
1869 "then all capabilities are cleared from the permitted and effective "
1874 #: build/C/man7/capabilities.7:857
1876 "If the effective user ID is changed from 0 to nonzero, then all capabilities "
1877 "are cleared from the effective set."
1881 #: build/C/man7/capabilities.7:860
1883 "If the effective user ID is changed from nonzero to 0, then the permitted "
1884 "set is copied to the effective set."
1888 #: build/C/man7/capabilities.7:860 build/C/man7/capabilities.7:915
1894 #: build/C/man7/capabilities.7:878
1896 "If the file system user ID is changed from 0 to nonzero (see B<setfsuid>(2)) "
1897 "then the following capabilities are cleared from the effective set: "
1898 "B<CAP_CHOWN>, B<CAP_DAC_OVERRIDE>, B<CAP_DAC_READ_SEARCH>, B<CAP_FOWNER>, "
1899 "B<CAP_FSETID>, B<CAP_LINUX_IMMUTABLE> (since Linux 2.2.30), "
1900 "B<CAP_MAC_OVERRIDE>, and B<CAP_MKNOD> (since Linux 2.2.30). If the file "
1901 "system UID is changed from nonzero to 0, then any of these capabilities that "
1902 "are enabled in the permitted set are enabled in the effective set."
1906 #: build/C/man7/capabilities.7:886
1908 "If a thread that has a 0 value for one or more of its user IDs wants to "
1909 "prevent its permitted capability set being cleared when it resets all of its "
1910 "user IDs to nonzero values, it can do so using the B<prctl>(2) "
1911 "B<PR_SET_KEEPCAPS> operation."
1915 #: build/C/man7/capabilities.7:886
1917 msgid "Programmatically adjusting capability sets"
1921 #: build/C/man7/capabilities.7:901
1923 "A thread can retrieve and change its capability sets using the B<capget>(2) "
1924 "and B<capset>(2) system calls. However, the use of B<cap_get_proc>(3) and "
1925 "B<cap_set_proc>(3), both provided in the I<libcap> package, is preferred for "
1926 "this purpose. The following rules govern changes to the thread capability "
1931 #: build/C/man7/capabilities.7:907
1933 "If the caller does not have the B<CAP_SETPCAP> capability, the new "
1934 "inheritable set must be a subset of the combination of the existing "
1935 "inheritable and permitted sets."
1939 #: build/C/man7/capabilities.7:911
1941 "(Since kernel 2.6.25) The new inheritable set must be a subset of the "
1942 "combination of the existing inheritable set and the capability bounding set."
1946 #: build/C/man7/capabilities.7:915
1948 "The new permitted set must be a subset of the existing permitted set (i.e., "
1949 "it is not possible to acquire permitted capabilities that the thread does "
1950 "not currently have)."
1954 #: build/C/man7/capabilities.7:917
1955 msgid "The new effective set must be a subset of the new permitted set."
1959 #: build/C/man7/capabilities.7:917
1961 msgid "The \"securebits\" flags: establishing a capabilities-only environment"
1964 #. For some background:
1965 #. see http://lwn.net/Articles/280279/ and
1966 #. http://article.gmane.org/gmane.linux.kernel.lsm/5476/
1968 #: build/C/man7/capabilities.7:928
1970 "Starting with kernel 2.6.26, and with a kernel in which file capabilities "
1971 "are enabled, Linux implements a set of per-thread I<securebits> flags that "
1972 "can be used to disable special handling of capabilities for UID 0 "
1973 "(I<root>). These flags are as follows:"
1977 #: build/C/man7/capabilities.7:928
1979 msgid "B<SECBIT_KEEP_CAPS>"
1983 #: build/C/man7/capabilities.7:940
1985 "Setting this flag allows a thread that has one or more 0 UIDs to retain its "
1986 "capabilities when it switches all of its UIDs to a nonzero value. If this "
1987 "flag is not set, then such a UID switch causes the thread to lose all "
1988 "capabilities. This flag is always cleared on an B<execve>(2). (This flag "
1989 "provides the same functionality as the older B<prctl>(2) B<PR_SET_KEEPCAPS> "
1994 #: build/C/man7/capabilities.7:940
1996 msgid "B<SECBIT_NO_SETUID_FIXUP>"
2000 #: build/C/man7/capabilities.7:947
2002 "Setting this flag stops the kernel from adjusting capability sets when the "
2003 "threads's effective and file system UIDs are switched between zero and "
2004 "nonzero values. (See the subsection I<Effect of User ID Changes on "
2009 #: build/C/man7/capabilities.7:947
2011 msgid "B<SECBIT_NOROOT>"
2015 #: build/C/man7/capabilities.7:955
2017 "If this bit is set, then the kernel does not grant capabilities when a "
2018 "set-user-ID-root program is executed, or when a process with an effective or "
2019 "real UID of 0 calls B<execve>(2). (See the subsection I<Capabilities and "
2020 "execution of programs by root>.)"
2024 #: build/C/man7/capabilities.7:965
2026 "Each of the above \"base\" flags has a companion \"locked\" flag. Setting "
2027 "any of the \"locked\" flags is irreversible, and has the effect of "
2028 "preventing further changes to the corresponding \"base\" flag. The locked "
2029 "flags are: B<SECBIT_KEEP_CAPS_LOCKED>, B<SECBIT_NO_SETUID_FIXUP_LOCKED>, and "
2030 "B<SECBIT_NOROOT_LOCKED>."
2034 #: build/C/man7/capabilities.7:977
2036 "The I<securebits> flags can be modified and retrieved using the B<prctl>(2) "
2037 "B<PR_SET_SECUREBITS> and B<PR_GET_SECUREBITS> operations. The "
2038 "B<CAP_SETPCAP> capability is required to modify the flags."
2042 #: build/C/man7/capabilities.7:986
2044 "The I<securebits> flags are inherited by child processes. During an "
2045 "B<execve>(2), all of the flags are preserved, except B<SECBIT_KEEP_CAPS> "
2046 "which is always cleared."
2050 #: build/C/man7/capabilities.7:991
2052 "An application can use the following call to lock itself, and all of its "
2053 "descendants, into an environment where the only way of gaining capabilities "
2054 "is by executing a program with associated file capabilities:"
2058 #: build/C/man7/capabilities.7:1000
2061 "prctl(PR_SET_SECUREBITS,\n"
2062 " SECBIT_KEEP_CAPS_LOCKED |\n"
2063 " SECBIT_NO_SETUID_FIXUP |\n"
2064 " SECBIT_NO_SETUID_FIXUP_LOCKED |\n"
2065 " SECBIT_NOROOT |\n"
2066 " SECBIT_NOROOT_LOCKED);\n"
2070 #: build/C/man7/capabilities.7:1007
2072 "No standards govern capabilities, but the Linux capability implementation is "
2073 "based on the withdrawn POSIX.1e draft standard; see "
2074 "I<http://wt.xpilot.org/publications/posix.1e/>."
2078 #: build/C/man7/capabilities.7:1011
2080 "Since kernel 2.5.27, capabilities are an optional kernel component, and can "
2081 "be enabled/disabled via the CONFIG_SECURITY_CAPABILITIES kernel "
2082 "configuration option."
2086 #: build/C/man7/capabilities.7:1018
2088 "The I</proc/PID/task/TID/status> file can be used to view the capability "
2089 "sets of a thread. The I</proc/PID/status> file shows the capability sets of "
2090 "a process's main thread."
2094 #: build/C/man7/capabilities.7:1033
2096 "The I<libcap> package provides a suite of routines for setting and getting "
2097 "capabilities that is more comfortable and less likely to change than the "
2098 "interface provided by B<capset>(2) and B<capget>(2). This package also "
2099 "provides the B<setcap>(8) and B<getcap>(8) programs. It can be found at"
2103 #: build/C/man7/capabilities.7:1035
2104 msgid "I<http://www.kernel.org/pub/linux/libs/security/linux-privs>."
2108 #: build/C/man7/capabilities.7:1044
2110 "Before kernel 2.6.24, and since kernel 2.6.24 if file capabilities are not "
2111 "enabled, a thread with the B<CAP_SETPCAP> capability can manipulate the "
2112 "capabilities of threads other than itself. However, this is only "
2113 "theoretically possible, since no thread ever has B<CAP_SETPCAP> in either of "
2118 #: build/C/man7/capabilities.7:1049
2120 "In the pre-2.6.25 implementation the system-wide capability bounding set, "
2121 "I</proc/sys/kernel/cap-bound>, always masks out this capability, and this "
2122 "can not be changed without modifying the kernel source and rebuilding."
2126 #: build/C/man7/capabilities.7:1055
2128 "If file capabilities are disabled in the current implementation, then "
2129 "B<init> starts out with this capability removed from its per-process "
2130 "bounding set, and that bounding set is inherited by all other processes "
2131 "created on the system."
2135 #: build/C/man7/capabilities.7:1072
2137 "B<capget>(2), B<prctl>(2), B<setfsuid>(2), B<cap_clear>(3), "
2138 "B<cap_copy_ext>(3), B<cap_from_text>(3), B<cap_get_file>(3), "
2139 "B<cap_get_proc>(3), B<cap_init>(3), B<capgetp>(3), B<capsetp>(3), "
2140 "B<libcap>(3), B<credentials>(7), B<pthreads>(7), B<getcap>(8), B<setcap>(8)"
2144 #: build/C/man7/capabilities.7:1076
2146 "Comments on the purposes of various capabilities in "
2147 "I<include/linux/capability.h> in the kernel source"
2151 #: build/C/man2/capget.2:11
2157 #: build/C/man2/capget.2:11
2163 #: build/C/man2/capget.2:14
2164 msgid "capget, capset - set/get capabilities of thread(s)"
2168 #: build/C/man2/capget.2:16
2169 msgid "B<#include E<lt>sys/capability.hE<gt>>"
2173 #: build/C/man2/capget.2:18
2174 msgid "B<int capget(cap_user_header_t >I<hdrp>B<, cap_user_data_t >I<datap>B<);>"
2178 #: build/C/man2/capget.2:20
2180 "B<int capset(cap_user_header_t >I<hdrp>B<, const cap_user_data_t "
2185 #: build/C/man2/capget.2:31
2187 "As of Linux 2.2, the power of the superuser (root) has been partitioned into "
2188 "a set of discrete capabilities. Each thread has a set of effective "
2189 "capabilities identifying which capabilities (if any) it may currently "
2190 "exercise. Each thread also has a set of inheritable capabilities that may "
2191 "be passed through an B<execve>(2) call, and a set of permitted capabilities "
2192 "that it can make effective or inheritable."
2196 #: build/C/man2/capget.2:40
2198 "These two functions are the raw kernel interface for getting and setting "
2199 "thread capabilities. Not only are these system calls specific to Linux, but "
2200 "the kernel API is likely to change and use of these functions (in particular "
2201 "the format of the I<cap_user_*_t> types) is subject to extension with each "
2202 "kernel revision, but old programs will keep working."
2206 #: build/C/man2/capget.2:51
2208 "The portable interfaces are B<cap_set_proc>(3) and B<cap_get_proc>(3); if "
2209 "possible you should use those interfaces in applications. If you wish to "
2210 "use the Linux extensions in applications, you should use the easier-to-use "
2211 "interfaces B<capsetp>(3) and B<capgetp>(3)."
2215 #: build/C/man2/capget.2:51
2217 msgid "Current details"
2221 #: build/C/man2/capget.2:54
2223 "Now that you have been warned, some current kernel details. The structures "
2224 "are defined as follows."
2228 #: build/C/man2/capget.2:59
2231 "#define _LINUX_CAPABILITY_VERSION_1 0x19980330\n"
2232 "#define _LINUX_CAPABILITY_U32S_1 1\n"
2236 #: build/C/man2/capget.2:62
2239 "#define _LINUX_CAPABILITY_VERSION_2 0x20071026\n"
2240 "#define _LINUX_CAPABILITY_U32S_2 2\n"
2244 #: build/C/man2/capget.2:67
2247 "typedef struct __user_cap_header_struct {\n"
2250 "} *cap_user_header_t;\n"
2254 #: build/C/man2/capget.2:73
2257 "typedef struct __user_cap_data_struct {\n"
2258 " __u32 effective;\n"
2259 " __u32 permitted;\n"
2260 " __u32 inheritable;\n"
2261 "} *cap_user_data_t;\n"
2265 #: build/C/man2/capget.2:88
2267 "I<effective, permitted, inheritable> are bitmasks of the capabilities "
2268 "defined in I<capability(7).> Note the I<CAP_*> values are bit indexes and "
2269 "need to be bit-shifted before ORing into the bit fields. To define the "
2270 "structures for passing to the system call you have to use the I<struct "
2271 "__user_cap_header_struct> and I<struct __user_cap_data_struct> names because "
2272 "the typedefs are only pointers."
2276 #: build/C/man2/capget.2:100
2278 "Kernels prior to 2.6.25 prefer 32-bit capabilities with version "
2279 "B<_LINUX_CAPABILITY_VERSION_1>, and kernels 2.6.25+ prefer 64-bit "
2280 "capabilities with version B<_LINUX_CAPABILITY_VERSION_2>. Note, 64-bit "
2281 "capabilities use I<datap>[0] and I<datap>[1], whereas 32-bit capabilities "
2282 "use only I<datap>[0]."
2286 #: build/C/man2/capget.2:104
2288 "Another change affecting the behavior of these system calls is kernel "
2289 "support for file capabilities (VFS capability support). This support is "
2290 "currently a compile time option (added in kernel 2.6.24)."
2294 #: build/C/man2/capget.2:111
2296 "For B<capget>() calls, one can probe the capabilities of any process by "
2297 "specifying its process ID with the I<hdrp-E<gt>pid> field value."
2301 #: build/C/man2/capget.2:111
2303 msgid "With VFS Capability Support"
2307 #: build/C/man2/capget.2:123
2309 "VFS Capability support creates a file-attribute method for adding "
2310 "capabilities to privileged executables. This privilege model obsoletes "
2311 "kernel support for one process asynchronously setting the capabilities of "
2312 "another. That is, with VFS support, for B<capset>() calls the only "
2313 "permitted values for I<hdrp-E<gt>pid> are 0 or B<getpid>(2), which are "
2318 #: build/C/man2/capget.2:123
2320 msgid "Without VFS Capability Support"
2324 #: build/C/man2/capget.2:149
2326 "When the kernel does not support VFS capabilities, B<capset>() calls can "
2327 "operate on the capabilities of the thread specified by the I<pid> field of "
2328 "I<hdrp> when that is nonzero, or on the capabilities of the calling thread "
2329 "if I<pid> is 0. If I<pid> refers to a single-threaded process, then I<pid> "
2330 "can be specified as a traditional process ID; operating on a thread of a "
2331 "multithreaded process requires a thread ID of the type returned by "
2332 "B<gettid>(2). For B<capset>(), I<pid> can also be: -1, meaning perform the "
2333 "change on all threads except the caller and B<init>(8); or a value less than "
2334 "-1, in which case the change is applied to all members of the process group "
2335 "whose ID is -I<pid>."
2339 #: build/C/man2/capget.2:152
2340 msgid "For details on the data, see B<capabilities>(7)."
2344 #: build/C/man2/capget.2:171
2346 "The calls will fail with the error B<EINVAL>, and set the I<version> field "
2347 "of I<hdrp> to the kernel preferred value of B<_LINUX_CAPABILITY_VERSION_?> "
2348 "when an unsupported I<version> value is specified. In this way, one can "
2349 "probe what the current preferred capability revision is."
2353 #: build/C/man2/capget.2:180
2355 "Bad memory address. I<hdrp> must not be NULL. I<datap> may be NULL only "
2356 "when the user is trying to determine the preferred capability version format "
2357 "supported by the kernel."
2361 #: build/C/man2/capget.2:180 build/C/man7/cpuset.7:1179 build/C/man7/cpuset.7:1188 build/C/man7/cpuset.7:1197 build/C/man7/cpuset.7:1207 build/C/man7/cpuset.7:1216 build/C/man7/cpuset.7:1223 build/C/man7/cpuset.7:1230 build/C/man2/getgroups.2:114 build/C/man2/getgroups.2:121 build/C/man2/getpriority.2:119 build/C/man2/getrlimit.2:440 build/C/man2/getrusage.2:190 build/C/man2/iopl.2:71 build/C/man2/ioprio_set.2:160 build/C/man2/setpgid.2:200
2367 #: build/C/man2/capget.2:183
2368 msgid "One of the arguments was invalid."
2372 #: build/C/man2/capget.2:188
2374 "An attempt was made to add a capability to the Permitted set, or to set a "
2375 "capability in the Effective or Inheritable sets that is not in the Permitted "
2380 #: build/C/man2/capget.2:207
2382 "The caller attempted to use B<capset>() to modify the capabilities of a "
2383 "thread other than itself, but lacked sufficient privilege. For kernels "
2384 "supporting VFS capabilities, this is never permitted. For kernels lacking "
2385 "VFS support, the B<CAP_SETPCAP> capability is required. (A bug in kernels "
2386 "before 2.6.11 meant that this error could also occur if a thread without "
2387 "this capability tried to change its own capabilities by specifying the "
2388 "I<pid> field as a nonzero value (i.e., the value returned by B<getpid>(2)) "
2393 #: build/C/man2/capget.2:207 build/C/man7/cpuset.7:1329 build/C/man2/getpriority.2:127 build/C/man2/getrlimit.2:464 build/C/man2/getsid.2:69 build/C/man2/ioprio_set.2:177 build/C/man2/setpgid.2:215
2399 #: build/C/man2/capget.2:210
2400 msgid "No such thread."
2404 #: build/C/man2/capget.2:212 build/C/man2/ioprio_set.2:188
2405 msgid "These system calls are Linux-specific."
2409 #: build/C/man2/capget.2:217
2411 "The portable interface to the capability querying and setting functions is "
2412 "provided by the I<libcap> library and is available here:"
2416 #: build/C/man2/capget.2:219
2417 msgid "http://www.kernel.org/pub/linux/libs/security/linux-privs"
2421 #: build/C/man2/capget.2:223
2422 msgid "B<clone>(2), B<gettid>(2), B<capabilities>(7)"
2426 #: build/C/man7/cpuset.7:24
2432 #: build/C/man7/cpuset.7:24
2438 #: build/C/man7/cpuset.7:27
2439 msgid "cpuset - confine processes to processor and memory node subsets"
2443 #: build/C/man7/cpuset.7:34
2445 "The cpuset file system is a pseudo-file-system interface to the kernel "
2446 "cpuset mechanism, which is used to control the processor placement and "
2447 "memory placement of processes. It is commonly mounted at I</dev/cpuset>."
2451 #: build/C/man7/cpuset.7:51
2453 "On systems with kernels compiled with built in support for cpusets, all "
2454 "processes are attached to a cpuset, and cpusets are always present. If a "
2455 "system supports cpusets, then it will have the entry B<nodev cpuset> in the "
2456 "file I</proc/filesystems>. By mounting the cpuset file system (see the "
2457 "B<EXAMPLE> section below), the administrator can configure the cpusets on a "
2458 "system to control the processor and memory placement of processes on that "
2459 "system. By default, if the cpuset configuration on a system is not modified "
2460 "or if the cpuset file system is not even mounted, then the cpuset mechanism, "
2461 "though present, has no affect on the system's behavior."
2465 #: build/C/man7/cpuset.7:53
2466 msgid "A cpuset defines a list of CPUs and memory nodes."
2470 #: build/C/man7/cpuset.7:62
2472 "The CPUs of a system include all the logical processing units on which a "
2473 "process can execute, including, if present, multiple processor cores within "
2474 "a package and Hyper-Threads within a processor core. Memory nodes include "
2475 "all distinct banks of main memory; small and SMP systems typically have just "
2476 "one memory node that contains all the system's main memory, while NUMA "
2477 "(non-uniform memory access) systems have multiple memory nodes."
2481 #: build/C/man7/cpuset.7:72
2483 "Cpusets are represented as directories in a hierarchical pseudo-file system, "
2484 "where the top directory in the hierarchy (I</dev/cpuset>) represents the "
2485 "entire system (all online CPUs and memory nodes) and any cpuset that is the "
2486 "child (descendant) of another parent cpuset contains a subset of that "
2487 "parent's CPUs and memory nodes. The directories and files representing "
2488 "cpusets have normal file-system permissions."
2492 #: build/C/man7/cpuset.7:83
2494 "Every process in the system belongs to exactly one cpuset. A process is "
2495 "confined to only run on the CPUs in the cpuset it belongs to, and to "
2496 "allocate memory only on the memory nodes in that cpuset. When a process "
2497 "B<fork>(2)s, the child process is placed in the same cpuset as its parent. "
2498 "With sufficient privilege, a process may be moved from one cpuset to another "
2499 "and the allowed CPUs and memory nodes of an existing cpuset may be changed."
2503 #: build/C/man7/cpuset.7:91
2505 "When the system begins booting, a single cpuset is defined that includes all "
2506 "CPUs and memory nodes on the system, and all processes are in that cpuset. "
2507 "During the boot process, or later during normal system operation, other "
2508 "cpusets may be created, as subdirectories of this top cpuset, under the "
2509 "control of the system administrator, and processes may be placed in these "
2514 #: build/C/man7/cpuset.7:113
2516 "Cpusets are integrated with the B<sched_setaffinity>(2) scheduling affinity "
2517 "mechanism and the B<mbind>(2) and B<set_mempolicy>(2) memory-placement "
2518 "mechanisms in the kernel. Neither of these mechanisms let a process make "
2519 "use of a CPU or memory node that is not allowed by that process's cpuset. "
2520 "If changes to a process's cpuset placement conflict with these other "
2521 "mechanisms, then cpuset placement is enforced even if it means overriding "
2522 "these other mechanisms. The kernel accomplishes this overriding by silently "
2523 "restricting the CPUs and memory nodes requested by these other mechanisms to "
2524 "those allowed by the invoking process's cpuset. This can result in these "
2525 "other calls returning an error, if for example, such a call ends up "
2526 "requesting an empty set of CPUs or memory nodes, after that request is "
2527 "restricted to the invoking process's cpuset."
2531 #: build/C/man7/cpuset.7:119
2533 "Typically, a cpuset is used to manage the CPU and memory-node confinement "
2534 "for a set of cooperating processes such as a batch scheduler job, and these "
2535 "other mechanisms are used to manage the placement of individual processes or "
2536 "memory regions within that set or job."
2540 #: build/C/man7/cpuset.7:119
2546 #: build/C/man7/cpuset.7:124
2548 "Each directory below I</dev/cpuset> represents a cpuset and contains a fixed "
2549 "set of pseudo-files describing the state of that cpuset."
2553 #: build/C/man7/cpuset.7:134
2555 "New cpusets are created using the B<mkdir>(2) system call or the "
2556 "B<mkdir>(1) command. The properties of a cpuset, such as its flags, "
2557 "allowed CPUs and memory nodes, and attached processes, are queried and "
2558 "modified by reading or writing to the appropriate file in that cpuset's "
2559 "directory, as listed below."
2563 #: build/C/man7/cpuset.7:140
2565 "The pseudo-files in each cpuset directory are automatically created when the "
2566 "cpuset is created, as a result of the B<mkdir>(2) invocation. It is not "
2567 "possible to directly add or remove these pseudo-files."
2571 #: build/C/man7/cpuset.7:148
2573 "A cpuset directory that contains no child cpuset directories, and has no "
2574 "attached processes, can be removed using B<rmdir>(2) or B<rmdir>(1). It is "
2575 "not necessary, or possible, to remove the pseudo-files inside the directory "
2576 "before removing it."
2580 #: build/C/man7/cpuset.7:162
2582 "The pseudo-files in each cpuset directory are small text files that may be "
2583 "read and written using traditional shell utilities such as B<cat>(1), and "
2584 "B<echo>(1), or from a program by using file I/O library functions or system "
2585 "calls, such as B<open>(2), B<read>(2), B<write>(2), and B<close>(2)."
2588 #. ====================== tasks ======================
2590 #: build/C/man7/cpuset.7:167
2592 "The pseudo-files in a cpuset directory represent internal kernel state and "
2593 "do not have any persistent image on disk. Each of these per-cpuset files is "
2594 "listed and described below."
2598 #: build/C/man7/cpuset.7:167
2604 #: build/C/man7/cpuset.7:177
2606 "List of the process IDs (PIDs) of the processes in that cpuset. The list is "
2607 "formatted as a series of ASCII decimal numbers, each followed by a newline. "
2608 "A process may be added to a cpuset (automatically removing it from the "
2609 "cpuset that previously contained it) by writing its PID to that cpuset's "
2610 "I<tasks> file (with or without a trailing newline.)"
2613 #. =================== notify_on_release ===================
2615 #: build/C/man7/cpuset.7:185
2617 "B<Warning:> only one PID may be written to the I<tasks> file at a time. If "
2618 "a string is written that contains more than one PID, only the first one will "
2623 #: build/C/man7/cpuset.7:185
2625 msgid "I<notify_on_release>"
2628 #. ====================== cpus ======================
2630 #: build/C/man7/cpuset.7:194
2632 "Flag (0 or 1). If set (1), that cpuset will receive special handling after "
2633 "it is released, that is, after all processes cease using it (i.e., terminate "
2634 "or are moved to a different cpuset) and all child cpuset directories have "
2635 "been removed. See the B<Notify On Release> section, below."
2639 #: build/C/man7/cpuset.7:194
2645 #: build/C/man7/cpuset.7:201
2647 "List of the physical numbers of the CPUs on which processes in that cpuset "
2648 "are allowed to execute. See B<List Format> below for a description of the "
2649 "format of I<cpus>."
2652 #. ==================== cpu_exclusive ====================
2654 #: build/C/man7/cpuset.7:207
2656 "The CPUs allowed to a cpuset may be changed by writing a new list to its "
2661 #: build/C/man7/cpuset.7:207
2663 msgid "I<cpu_exclusive>"
2667 #: build/C/man7/cpuset.7:214
2669 "Flag (0 or 1). If set (1), the cpuset has exclusive use of its CPUs (no "
2670 "sibling or cousin cpuset may overlap CPUs). By default this is off (0). "
2671 "Newly created cpusets also initially default this to off (0)."
2674 #. ====================== mems ======================
2676 #: build/C/man7/cpuset.7:236
2678 "Two cpusets are I<sibling> cpusets if they share the same parent cpuset in "
2679 "the I</dev/cpuset> hierarchy. Two cpusets are I<cousin> cpusets if neither "
2680 "is the ancestor of the other. Regardless of the I<cpu_exclusive> setting, "
2681 "if one cpuset is the ancestor of another, and if both of these cpusets have "
2682 "nonempty I<cpus>, then their I<cpus> must overlap, because the I<cpus> of "
2683 "any cpuset are always a subset of the I<cpus> of its parent cpuset."
2687 #: build/C/man7/cpuset.7:236
2692 #. ==================== mem_exclusive ====================
2694 #: build/C/man7/cpuset.7:244
2696 "List of memory nodes on which processes in this cpuset are allowed to "
2697 "allocate memory. See B<List Format> below for a description of the format "
2702 #: build/C/man7/cpuset.7:244
2704 msgid "I<mem_exclusive>"
2708 #: build/C/man7/cpuset.7:252
2710 "Flag (0 or 1). If set (1), the cpuset has exclusive use of its memory nodes "
2711 "(no sibling or cousin may overlap). Also if set (1), the cpuset is a "
2712 "B<Hardwall> cpuset (see below.) By default this is off (0). Newly created "
2713 "cpusets also initially default this to off (0)."
2716 #. ==================== mem_hardwall ====================
2718 #: build/C/man7/cpuset.7:260
2720 "Regardless of the I<mem_exclusive> setting, if one cpuset is the ancestor of "
2721 "another, then their memory nodes must overlap, because the memory nodes of "
2722 "any cpuset are always a subset of the memory nodes of that cpuset's parent "
2727 #: build/C/man7/cpuset.7:260
2729 msgid "I<mem_hardwall> (since Linux 2.6.26)"
2732 #. ==================== memory_migrate ====================
2734 #: build/C/man7/cpuset.7:271
2736 "Flag (0 or 1). If set (1), the cpuset is a B<Hardwall> cpuset (see below.) "
2737 "Unlike B<mem_exclusive>, there is no constraint on whether cpusets marked "
2738 "B<mem_hardwall> may have overlapping memory nodes with sibling or cousin "
2739 "cpusets. By default this is off (0). Newly created cpusets also initially "
2740 "default this to off (0)."
2744 #: build/C/man7/cpuset.7:271
2746 msgid "I<memory_migrate> (since Linux 2.6.16)"
2749 #. ==================== memory_pressure ====================
2751 #: build/C/man7/cpuset.7:278
2753 "Flag (0 or 1). If set (1), then memory migration is enabled. By default "
2754 "this is off (0). See the B<Memory Migration> section, below."
2758 #: build/C/man7/cpuset.7:278
2760 msgid "I<memory_pressure> (since Linux 2.6.16)"
2763 #. ================= memory_pressure_enabled =================
2765 #: build/C/man7/cpuset.7:291
2767 "A measure of how much memory pressure the processes in this cpuset are "
2768 "causing. See the B<Memory Pressure> section, below. Unless "
2769 "I<memory_pressure_enabled> is enabled, always has value zero (0). This file "
2770 "is read-only. See the B<WARNINGS> section, below."
2774 #: build/C/man7/cpuset.7:291
2776 msgid "I<memory_pressure_enabled> (since Linux 2.6.16)"
2779 #. ================== memory_spread_page ==================
2781 #: build/C/man7/cpuset.7:303
2783 "Flag (0 or 1). This file is only present in the root cpuset, normally "
2784 "I</dev/cpuset>. If set (1), the I<memory_pressure> calculations are enabled "
2785 "for all cpusets in the system. By default this is off (0). See the "
2786 "B<Memory Pressure> section, below."
2790 #: build/C/man7/cpuset.7:303
2792 msgid "I<memory_spread_page> (since Linux 2.6.17)"
2795 #. ================== memory_spread_slab ==================
2797 #: build/C/man7/cpuset.7:313
2799 "Flag (0 or 1). If set (1), pages in the kernel page cache (file-system "
2800 "buffers) are uniformly spread across the cpuset. By default this is off (0) "
2801 "in the top cpuset, and inherited from the parent cpuset in newly created "
2802 "cpusets. See the B<Memory Spread> section, below."
2806 #: build/C/man7/cpuset.7:313
2808 msgid "I<memory_spread_slab> (since Linux 2.6.17)"
2811 #. ================== sched_load_balance ==================
2813 #: build/C/man7/cpuset.7:324
2815 "Flag (0 or 1). If set (1), the kernel slab caches for file I/O (directory "
2816 "and inode structures) are uniformly spread across the cpuset. By default "
2817 "this is off (0) in the top cpuset, and inherited from the parent cpuset in "
2818 "newly created cpusets. See the B<Memory Spread> section, below."
2822 #: build/C/man7/cpuset.7:324
2824 msgid "I<sched_load_balance> (since Linux 2.6.24)"
2827 #. ================== sched_relax_domain_level ==================
2829 #: build/C/man7/cpuset.7:338
2831 "Flag (0 or 1). If set (1, the default) the kernel will automatically load "
2832 "balance processes in that cpuset over the allowed CPUs in that cpuset. If "
2833 "cleared (0) the kernel will avoid load balancing processes in this cpuset, "
2834 "I<unless> some other cpuset with overlapping CPUs has its "
2835 "I<sched_load_balance> flag set. See B<Scheduler Load Balancing>, below, for "
2840 #: build/C/man7/cpuset.7:338
2842 msgid "I<sched_relax_domain_level> (since Linux 2.6.26)"
2845 #. ================== proc cpuset ==================
2847 #: build/C/man7/cpuset.7:358
2849 "Integer, between -1 and a small positive value. The "
2850 "I<sched_relax_domain_level> controls the width of the range of CPUs over "
2851 "which the kernel scheduler performs immediate rebalancing of runnable tasks "
2852 "across CPUs. If I<sched_load_balance> is disabled, then the setting of "
2853 "I<sched_relax_domain_level> does not matter, as no such load balancing is "
2854 "done. If I<sched_load_balance> is enabled, then the higher the value of the "
2855 "I<sched_relax_domain_level>, the wider the range of CPUs over which "
2856 "immediate load balancing is attempted. See B<Scheduler Relax Domain Level>, "
2857 "below, for further details."
2860 #. ================== proc status ==================
2862 #: build/C/man7/cpuset.7:366
2864 "In addition to the above pseudo-files in each directory below "
2865 "I</dev/cpuset>, each process has a pseudo-file, "
2866 "I</proc/E<lt>pidE<gt>/cpuset>, that displays the path of the process's "
2867 "cpuset directory relative to the root of the cpuset file system."
2871 #: build/C/man7/cpuset.7:377
2873 "Also the I</proc/E<lt>pidE<gt>/status> file for each process has four added "
2874 "lines, displaying the process's I<Cpus_allowed> (on which CPUs it may be "
2875 "scheduled) and I<Mems_allowed> (on which memory nodes it may obtain memory), "
2876 "in the two formats B<Mask Format> and B<List Format> (see below) as shown "
2877 "in the following example:"
2881 #: build/C/man7/cpuset.7:384
2884 "Cpus_allowed: ffffffff,ffffffff,ffffffff,ffffffff\n"
2885 "Cpus_allowed_list: 0-127\n"
2886 "Mems_allowed: ffffffff,ffffffff\n"
2887 "Mems_allowed_list: 0-63\n"
2890 #. ================== EXTENDED CAPABILITIES ==================
2892 #: build/C/man7/cpuset.7:390
2894 "The \"allowed\" fields were added in Linux 2.6.24; the \"allowed_list\" "
2895 "fields were added in Linux 2.6.26."
2899 #: build/C/man7/cpuset.7:390
2901 msgid "EXTENDED CAPABILITIES"
2904 #. ================== Exclusive Cpusets ==================
2906 #: build/C/man7/cpuset.7:398
2908 "In addition to controlling which I<cpus> and I<mems> a process is allowed to "
2909 "use, cpusets provide the following extended capabilities."
2913 #: build/C/man7/cpuset.7:398
2915 msgid "Exclusive Cpusets"
2919 #: build/C/man7/cpuset.7:405
2921 "If a cpuset is marked I<cpu_exclusive> or I<mem_exclusive>, no other cpuset, "
2922 "other than a direct ancestor or descendant, may share any of the same CPUs "
2926 #. ================== Hardwall ==================
2928 #: build/C/man7/cpuset.7:431
2930 "A cpuset that is I<mem_exclusive> restricts kernel allocations for buffer "
2931 "cache pages and other internal kernel data pages commonly shared by the "
2932 "kernel across multiple users. All cpusets, whether I<mem_exclusive> or not, "
2933 "restrict allocations of memory for user space. This enables configuring a "
2934 "system so that several independent jobs can share common kernel data, while "
2935 "isolating each job's user allocation in its own cpuset. To do this, "
2936 "construct a large I<mem_exclusive> cpuset to hold all the jobs, and "
2937 "construct child, non-I<mem_exclusive> cpusets for each individual job. Only "
2938 "a small amount of kernel memory, such as requests from interrupt handlers, "
2939 "is allowed to be placed on memory nodes outside even a I<mem_exclusive> "
2944 #: build/C/man7/cpuset.7:431
2950 #: build/C/man7/cpuset.7:446
2952 "A cpuset that has I<mem_exclusive> or I<mem_hardwall> set is a I<hardwall> "
2953 "cpuset. A I<hardwall> cpuset restricts kernel allocations for page, buffer, "
2954 "and other data commonly shared by the kernel across multiple users. All "
2955 "cpusets, whether I<hardwall> or not, restrict allocations of memory for user "
2960 #: build/C/man7/cpuset.7:457
2962 "This enables configuring a system so that several independent jobs can share "
2963 "common kernel data, such as file system pages, while isolating each job's "
2964 "user allocation in its own cpuset. To do this, construct a large "
2965 "I<hardwall> cpuset to hold all the jobs, and construct child cpusets for "
2966 "each individual job which are not I<hardwall> cpusets."
2969 #. ================== Notify On Release ==================
2971 #: build/C/man7/cpuset.7:463
2973 "Only a small amount of kernel memory, such as requests from interrupt "
2974 "handlers, is allowed to be taken outside even a I<hardwall> cpuset."
2978 #: build/C/man7/cpuset.7:463
2980 msgid "Notify On Release"
2984 #: build/C/man7/cpuset.7:475
2986 "If the I<notify_on_release> flag is enabled (1) in a cpuset, then whenever "
2987 "the last process in the cpuset leaves (exits or attaches to some other "
2988 "cpuset) and the last child cpuset of that cpuset is removed, the kernel "
2989 "will run the command I</sbin/cpuset_release_agent>, supplying the pathname "
2990 "(relative to the mount point of the cpuset file system) of the abandoned "
2991 "cpuset. This enables automatic removal of abandoned cpusets."
2995 #: build/C/man7/cpuset.7:483
2997 "The default value of I<notify_on_release> in the root cpuset at system boot "
2998 "is disabled (0). The default value of other cpusets at creation is the "
2999 "current value of their parent's I<notify_on_release> setting."
3003 #: build/C/man7/cpuset.7:491
3005 "The command I</sbin/cpuset_release_agent> is invoked, with the name "
3006 "(I</dev/cpuset> relative path) of the to-be-released cpuset in I<argv[1]>."
3010 #: build/C/man7/cpuset.7:495
3012 "The usual contents of the command I</sbin/cpuset_release_agent> is simply "
3017 #: build/C/man7/cpuset.7:500
3021 "rmdir /dev/cpuset/$1\n"
3024 #. ================== Memory Pressure ==================
3026 #: build/C/man7/cpuset.7:508
3028 "As with other flag values below, this flag can be changed by writing an "
3029 "ASCII number 0 or 1 (with optional trailing newline) into the file, to "
3030 "clear or set the flag, respectively."
3034 #: build/C/man7/cpuset.7:508
3036 msgid "Memory Pressure"
3040 #: build/C/man7/cpuset.7:514
3042 "The I<memory_pressure> of a cpuset provides a simple per-cpuset running "
3043 "average of the rate that the processes in a cpuset are attempting to free up "
3044 "in-use memory on the nodes of the cpuset to satisfy additional memory "
3049 #: build/C/man7/cpuset.7:518
3051 "This enables batch managers that are monitoring jobs running in dedicated "
3052 "cpusets to efficiently detect what level of memory pressure that job is "
3057 #: build/C/man7/cpuset.7:525
3059 "This is useful both on tightly managed systems running a wide mix of "
3060 "submitted jobs, which may choose to terminate or reprioritize jobs that are "
3061 "trying to use more memory than allowed on the nodes assigned them, and with "
3062 "tightly coupled, long-running, massively parallel scientific computing jobs "
3063 "that will dramatically fail to meet required performance goals if they start "
3064 "to use more memory than allowed to them."
3068 #: build/C/man7/cpuset.7:530
3070 "This mechanism provides a very economical way for the batch manager to "
3071 "monitor a cpuset for signs of memory pressure. It's up to the batch manager "
3072 "or other user code to decide what action to take if it detects signs of "
3077 #: build/C/man7/cpuset.7:537
3079 "Unless memory pressure calculation is enabled by setting the pseudo-file "
3080 "I</dev/cpuset/memory_pressure_enabled>, it is not computed for any cpuset, "
3081 "and reads from any I<memory_pressure> always return zero, as represented by "
3082 "the ASCII string \"0\\en\". See the B<WARNINGS> section, below."
3086 #: build/C/man7/cpuset.7:539
3087 msgid "A per-cpuset, running average is employed for the following reasons:"
3091 #: build/C/man7/cpuset.7:544
3093 "Because this meter is per-cpuset rather than per-process or per virtual "
3094 "memory region, the system load imposed by a batch scheduler monitoring this "
3095 "metric is sharply reduced on large systems, because a scan of the tasklist "
3096 "can be avoided on each set of queries."
3100 #: build/C/man7/cpuset.7:549
3102 "Because this meter is a running average rather than an accumulating counter, "
3103 "a batch scheduler can detect memory pressure with a single read, instead of "
3104 "having to read and accumulate results for a period of time."
3108 #: build/C/man7/cpuset.7:555
3110 "Because this meter is per-cpuset rather than per-process, the batch "
3111 "scheduler can obtain the key information\\(emmemory pressure in a "
3112 "cpuset\\(emwith a single read, rather than having to query and accumulate "
3113 "results over all the (dynamically changing) set of processes in the cpuset."
3117 #: build/C/man7/cpuset.7:563
3119 "The I<memory_pressure> of a cpuset is calculated using a per-cpuset simple "
3120 "digital filter that is kept within the kernel. For each cpuset, this filter "
3121 "tracks the recent rate at which processes attached to that cpuset enter the "
3122 "kernel direct reclaim code."
3126 #: build/C/man7/cpuset.7:572
3128 "The kernel direct reclaim code is entered whenever a process has to satisfy "
3129 "a memory page request by first finding some other page to repurpose, due to "
3130 "lack of any readily available already free pages. Dirty file system pages "
3131 "are repurposed by first writing them to disk. Unmodified file system buffer "
3132 "pages are repurposed by simply dropping them, though if that page is needed "
3133 "again, it will have to be reread from disk."
3136 #. ================== Memory Spread ==================
3138 #: build/C/man7/cpuset.7:580
3140 "The I<memory_pressure> file provides an integer number representing the "
3141 "recent (half-life of 10 seconds) rate of entries to the direct reclaim code "
3142 "caused by any process in the cpuset, in units of reclaims attempted per "
3143 "second, times 1000."
3147 #: build/C/man7/cpuset.7:580
3149 msgid "Memory Spread"
3153 #: build/C/man7/cpuset.7:588
3155 "There are two Boolean flag files per cpuset that control where the kernel "
3156 "allocates pages for the file-system buffers and related in-kernel data "
3157 "structures. They are called I<memory_spread_page> and "
3158 "I<memory_spread_slab>."
3162 #: build/C/man7/cpuset.7:595
3164 "If the per-cpuset Boolean flag file I<memory_spread_page> is set, then the "
3165 "kernel will spread the file-system buffers (page cache) evenly over all the "
3166 "nodes that the faulting process is allowed to use, instead of preferring to "
3167 "put those pages on the node where the process is running."
3171 #: build/C/man7/cpuset.7:603
3173 "If the per-cpuset Boolean flag file I<memory_spread_slab> is set, then the "
3174 "kernel will spread some file-system-related slab caches, such as those for "
3175 "inodes and directory entries, evenly over all the nodes that the faulting "
3176 "process is allowed to use, instead of preferring to put those pages on the "
3177 "node where the process is running."
3181 #: build/C/man7/cpuset.7:608
3183 "The setting of these flags does not affect the data segment (see B<brk>(2)) "
3184 "or stack segment pages of a process."
3188 #: build/C/man7/cpuset.7:616
3190 "By default, both kinds of memory spreading are off and the kernel prefers to "
3191 "allocate memory pages on the node local to where the requesting process is "
3192 "running. If that node is not allowed by the process's NUMA memory policy or "
3193 "cpuset configuration or if there are insufficient free memory pages on that "
3194 "node, then the kernel looks for the nearest node that is allowed and has "
3195 "sufficient free memory."
3199 #: build/C/man7/cpuset.7:619
3201 "When new cpusets are created, they inherit the memory spread settings of "
3206 #: build/C/man7/cpuset.7:634
3208 "Setting memory spreading causes allocations for the affected page or slab "
3209 "caches to ignore the process's NUMA memory policy and be spread instead. "
3210 "However, the effect of these changes in memory placement caused by "
3211 "cpuset-specified memory spreading is hidden from the B<mbind>(2) or "
3212 "B<set_mempolicy>(2) calls. These two NUMA memory policy calls always "
3213 "appear to behave as if no cpuset-specified memory spreading is in effect, "
3214 "even if it is. If cpuset memory spreading is subsequently turned off, the "
3215 "NUMA memory policy most recently specified by these calls is automatically "
3220 #: build/C/man7/cpuset.7:643
3222 "Both I<memory_spread_page> and I<memory_spread_slab> are Boolean flag "
3223 "files. By default they contain \"0\", meaning that the feature is off for "
3224 "that cpuset. If a \"1\" is written to that file, that turns the named "
3229 #: build/C/man7/cpuset.7:646
3231 "Cpuset-specified memory spreading behaves similarly to what is known (in "
3232 "other contexts) as round-robin or interleave memory placement."
3236 #: build/C/man7/cpuset.7:649
3238 "Cpuset-specified memory spreading can provide substantial performance "
3239 "improvements for jobs that:"
3243 #: build/C/man7/cpuset.7:649
3249 #: build/C/man7/cpuset.7:653
3251 "need to place thread-local data on memory nodes close to the CPUs which are "
3252 "running the threads that most frequently access that data; but also"
3256 #: build/C/man7/cpuset.7:653
3262 #: build/C/man7/cpuset.7:656
3264 "need to access large file-system data sets that must to be spread across the "
3265 "several nodes in the job's cpuset in order to fit."
3268 #. ================== Memory Migration ==================
3270 #: build/C/man7/cpuset.7:663
3272 "Without this policy, the memory allocation across the nodes in the job's "
3273 "cpuset can become very uneven, especially for jobs that might have just a "
3274 "single thread initializing or reading in the data set."
3278 #: build/C/man7/cpuset.7:663
3280 msgid "Memory Migration"
3284 #: build/C/man7/cpuset.7:672
3286 "Normally, under the default setting (disabled) of I<memory_migrate>, once a "
3287 "page is allocated (given a physical page of main memory) then that page "
3288 "stays on whatever node it was allocated, so long as it remains allocated, "
3289 "even if the cpuset's memory-placement policy I<mems> subsequently changes."
3293 #: build/C/man7/cpuset.7:678
3295 "When memory migration is enabled in a cpuset, if the I<mems> setting of the "
3296 "cpuset is changed, then any memory page in use by any process in the cpuset "
3297 "that is on a memory node that is no longer allowed will be migrated to a "
3298 "memory node that is allowed."
3302 #: build/C/man7/cpuset.7:684
3304 "Furthermore, if a process is moved into a cpuset with I<memory_migrate> "
3305 "enabled, any memory pages it uses that were on memory nodes allowed in its "
3306 "previous cpuset, but which are not allowed in its new cpuset, will be "
3307 "migrated to a memory node allowed in the new cpuset."
3310 #. ================== Scheduler Load Balancing ==================
3312 #: build/C/man7/cpuset.7:692
3314 "The relative placement of a migrated page within the cpuset is preserved "
3315 "during these migration operations if possible. For example, if the page was "
3316 "on the second valid node of the prior cpuset, then the page will be placed "
3317 "on the second valid node of the new cpuset, if possible."
3321 #: build/C/man7/cpuset.7:692
3323 msgid "Scheduler Load Balancing"
3327 #: build/C/man7/cpuset.7:699
3329 "The kernel scheduler automatically load balances processes. If one CPU is "
3330 "underutilized, the kernel will look for processes on other more overloaded "
3331 "CPUs and move those processes to the underutilized CPU, within the "
3332 "constraints of such placement mechanisms as cpusets and "
3333 "B<sched_setaffinity>(2)."
3337 #: build/C/man7/cpuset.7:712
3339 "The algorithmic cost of load balancing and its impact on key shared kernel "
3340 "data structures such as the process list increases more than linearly with "
3341 "the number of CPUs being balanced. For example, it costs more to load "
3342 "balance across one large set of CPUs than it does to balance across two "
3343 "smaller sets of CPUs, each of half the size of the larger set. (The precise "
3344 "relationship between the number of CPUs being balanced and the cost of load "
3345 "balancing depends on implementation details of the kernel process scheduler, "
3346 "which is subject to change over time, as improved kernel scheduler "
3347 "algorithms are implemented.)"
3351 #: build/C/man7/cpuset.7:718
3353 "The per-cpuset flag I<sched_load_balance> provides a mechanism to suppress "
3354 "this automatic scheduler load balancing in cases where it is not needed and "
3355 "suppressing it would have worthwhile performance benefits."
3359 #: build/C/man7/cpuset.7:722
3361 "By default, load balancing is done across all CPUs, except those marked "
3362 "isolated using the kernel boot time \"isolcpus=\" argument. (See "
3363 "B<Scheduler Relax Domain Level>, below, to change this default.)"
3367 #: build/C/man7/cpuset.7:725
3369 "This default load balancing across all CPUs is not well suited to the "
3370 "following two situations:"
3374 #: build/C/man7/cpuset.7:729
3376 "On large systems, load balancing across many CPUs is expensive. If the "
3377 "system is managed using cpusets to place independent jobs on separate sets "
3378 "of CPUs, full load balancing is unnecessary."
3382 #: build/C/man7/cpuset.7:733
3384 "Systems supporting real-time on some CPUs need to minimize system overhead "
3385 "on those CPUs, including avoiding process load balancing if that is not "
3390 #: build/C/man7/cpuset.7:743
3392 "When the per-cpuset flag I<sched_load_balance> is enabled (the default "
3393 "setting), it requests load balancing across all the CPUs in that cpuset's "
3394 "allowed CPUs, ensuring that load balancing can move a process (not otherwise "
3395 "pinned, as by B<sched_setaffinity>(2)) from any CPU in that cpuset to any "
3400 #: build/C/man7/cpuset.7:752
3402 "When the per-cpuset flag I<sched_load_balance> is disabled, then the "
3403 "scheduler will avoid load balancing across the CPUs in that cpuset, "
3404 "I<except> in so far as is necessary because some overlapping cpuset has "
3405 "I<sched_load_balance> enabled."
3409 #: build/C/man7/cpuset.7:760
3411 "So, for example, if the top cpuset has the flag I<sched_load_balance> "
3412 "enabled, then the scheduler will load balance across all CPUs, and the "
3413 "setting of the I<sched_load_balance> flag in other cpusets has no effect, as "
3414 "we're already fully load balancing."
3418 #: build/C/man7/cpuset.7:765
3420 "Therefore in the above two situations, the flag I<sched_load_balance> should "
3421 "be disabled in the top cpuset, and only some of the smaller, child cpusets "
3422 "would have this flag enabled."
3426 #: build/C/man7/cpuset.7:773
3428 "When doing this, you don't usually want to leave any unpinned processes in "
3429 "the top cpuset that might use nontrivial amounts of CPU, as such processes "
3430 "may be artificially constrained to some subset of CPUs, depending on the "
3431 "particulars of this flag setting in descendant cpusets. Even if such a "
3432 "process could use spare CPU cycles in some other CPUs, the kernel scheduler "
3433 "might not consider the possibility of load balancing that process to the "
3437 #. ================== Scheduler Relax Domain Level ==================
3439 #: build/C/man7/cpuset.7:779
3441 "Of course, processes pinned to a particular CPU can be left in a cpuset that "
3442 "disables I<sched_load_balance> as those processes aren't going anywhere else "
3447 #: build/C/man7/cpuset.7:779
3449 msgid "Scheduler Relax Domain Level"
3453 #: build/C/man7/cpuset.7:800
3455 "The kernel scheduler performs immediate load balancing whenever a CPU "
3456 "becomes free or another task becomes runnable. This load balancing works to "
3457 "ensure that as many CPUs as possible are usefully employed running tasks. "
3458 "The kernel also performs periodic load balancing off the software clock "
3459 "described in I<time>(7). The setting of I<sched_relax_domain_level> only "
3460 "applies to immediate load balancing. Regardless of the "
3461 "I<sched_relax_domain_level> setting, periodic load balancing is attempted "
3462 "over all CPUs (unless disabled by turning off I<sched_load_balance>.) In "
3463 "any case, of course, tasks will only be scheduled to run on CPUs allowed by "
3464 "their cpuset, as modified by B<sched_setaffinity>(2) system calls."
3468 #: build/C/man7/cpuset.7:808
3470 "On small systems, such as those with just a few CPUs, immediate load "
3471 "balancing is useful to improve system interactivity and to minimize wasteful "
3472 "idle CPU cycles. But on large systems, attempting immediate load balancing "
3473 "across a large number of CPUs can be more costly than it is worth, depending "
3474 "on the particular performance characteristics of the job mix and the "
3479 #: build/C/man7/cpuset.7:816
3481 "The exact meaning of the small integer values of I<sched_relax_domain_level> "
3482 "will depend on internal implementation details of the kernel scheduler code "
3483 "and on the non-uniform architecture of the hardware. Both of these will "
3484 "evolve over time and vary by system architecture and kernel version."
3488 #: build/C/man7/cpuset.7:821
3490 "As of this writing, when this capability was introduced in Linux 2.6.26, on "
3491 "certain popular architectures, the positive values of "
3492 "I<sched_relax_domain_level> have the following meanings."
3496 #: build/C/man7/cpuset.7:823
3502 #: build/C/man7/cpuset.7:826
3504 "Perform immediate load balancing across Hyper-Thread siblings on the same "
3509 #: build/C/man7/cpuset.7:826
3515 #: build/C/man7/cpuset.7:828
3516 msgid "Perform immediate load balancing across other cores in the same package."
3520 #: build/C/man7/cpuset.7:828
3526 #: build/C/man7/cpuset.7:831
3528 "Perform immediate load balancing across other CPUs on the same node or "
3533 #: build/C/man7/cpuset.7:831
3539 #: build/C/man7/cpuset.7:834
3541 "Perform immediate load balancing across over several (implementation detail) "
3542 "nodes [On NUMA systems]."
3546 #: build/C/man7/cpuset.7:834
3552 #: build/C/man7/cpuset.7:837
3554 "Perform immediate load balancing across over all CPUs in system [On NUMA "
3559 #: build/C/man7/cpuset.7:846
3561 "The I<sched_relax_domain_level> value of zero (0) always means don't perform "
3562 "immediate load balancing, hence that load balancing is only done "
3563 "periodically, not immediately when a CPU becomes available or another task "
3568 #: build/C/man7/cpuset.7:854
3570 "The I<sched_relax_domain_level> value of minus one (-1) always means use "
3571 "the system default value. The system default value can vary by architecture "
3572 "and kernel version. This system default value can be changed by kernel "
3573 "boot-time \"relax_domain_level=\" argument."
3577 #: build/C/man7/cpuset.7:862
3579 "In the case of multiple overlapping cpusets which have conflicting "
3580 "I<sched_relax_domain_level> values, then the highest such value applies to "
3581 "all CPUs in any of the overlapping cpusets. In such cases, the value "
3582 "B<minus one (-1)> is the lowest value, overridden by any other value, and "
3583 "the value B<zero (0)> is the next lowest value."
3587 #: build/C/man7/cpuset.7:862
3592 #. ================== Mask Format ==================
3594 #: build/C/man7/cpuset.7:866
3595 msgid "The following formats are used to represent sets of CPUs and memory nodes."
3599 #: build/C/man7/cpuset.7:866
3605 #: build/C/man7/cpuset.7:871
3607 "The B<Mask Format> is used to represent CPU and memory-node bitmasks in the "
3608 "I</proc/E<lt>pidE<gt>/status> file."
3612 #: build/C/man7/cpuset.7:879
3614 "This format displays each 32-bit word in hexadecimal (using ASCII characters "
3615 "\"0\" - \"9\" and \"a\" - \"f\"); words are filled with leading zeros, if "
3616 "required. For masks longer than one word, a comma separator is used between "
3617 "words. Words are displayed in big-endian order, which has the most "
3618 "significant bit first. The hex digits within a word are also in big-endian "
3623 #: build/C/man7/cpuset.7:882
3625 "The number of 32-bit words displayed is the minimum number needed to display "
3626 "all bits of the bitmask, based on the size of the bitmask."
3630 #: build/C/man7/cpuset.7:884
3631 msgid "Examples of the B<Mask Format>:"
3635 #: build/C/man7/cpuset.7:892
3638 "00000001 # just bit 0 set\n"
3639 "40000000,00000000,00000000 # just bit 94 set\n"
3640 "00000001,00000000,00000000 # just bit 64 set\n"
3641 "000000ff,00000000 # bits 32-39 set\n"
3642 "00000000,000E3862 # 1,5,6,11-13,17-19 set\n"
3646 #: build/C/man7/cpuset.7:896
3647 msgid "A mask with bits 0, 1, 2, 4, 8, 16, 32, and 64 set displays as:"
3651 #: build/C/man7/cpuset.7:900
3653 msgid "00000001,00000001,00010117\n"
3656 #. ================== List Format ==================
3658 #: build/C/man7/cpuset.7:907
3660 "The first \"1\" is for bit 64, the second for bit 32, the third for bit 16, "
3661 "the fourth for bit 8, the fifth for bit 4, and the \"7\" is for bits 2, 1, "
3666 #: build/C/man7/cpuset.7:907
3672 #: build/C/man7/cpuset.7:914
3674 "The B<List Format> for I<cpus> and I<mems> is a comma-separated list of CPU "
3675 "or memory-node numbers and ranges of numbers, in ASCII decimal."
3679 #: build/C/man7/cpuset.7:916
3680 msgid "Examples of the B<List Format>:"
3684 #: build/C/man7/cpuset.7:921
3687 "0-4,9 # bits 0, 1, 2, 3, 4, and 9 set\n"
3688 "0-2,7,12-14 # bits 0, 1, 2, 7, 12, 13, and 14 set\n"
3691 #. ================== RULES ==================
3693 #: build/C/man7/cpuset.7:924
3699 #: build/C/man7/cpuset.7:926
3700 msgid "The following rules apply to each cpuset:"
3704 #: build/C/man7/cpuset.7:929
3706 "Its CPUs and memory nodes must be a (possibly equal) subset of its "
3711 #: build/C/man7/cpuset.7:933
3712 msgid "It can only be marked I<cpu_exclusive> if its parent is."
3716 #: build/C/man7/cpuset.7:937
3717 msgid "It can only be marked I<mem_exclusive> if its parent is."
3721 #: build/C/man7/cpuset.7:941
3722 msgid "If it is I<cpu_exclusive>, its CPUs may not overlap any sibling."
3725 #. ================== PERMISSIONS ==================
3727 #: build/C/man7/cpuset.7:946
3728 msgid "If it is I<memory_exclusive>, its memory nodes may not overlap any sibling."
3732 #: build/C/man7/cpuset.7:946
3738 #: build/C/man7/cpuset.7:951
3740 "The permissions of a cpuset are determined by the permissions of the "
3741 "directories and pseudo-files in the cpuset file system, normally mounted at "
3746 #: build/C/man7/cpuset.7:960
3748 "For instance, a process can put itself in some other cpuset (than its "
3749 "current one) if it can write the I<tasks> file for that cpuset. This "
3750 "requires execute permission on the encompassing directories and write "
3751 "permission on the I<tasks> file."
3755 #: build/C/man7/cpuset.7:967
3757 "An additional constraint is applied to requests to place some other process "
3758 "in a cpuset. One process may not attach another to a cpuset unless it would "
3759 "have permission to send that process a signal (see B<kill>(2))."
3763 #: build/C/man7/cpuset.7:978
3765 "A process may create a child cpuset if it can access and write the parent "
3766 "cpuset directory. It can modify the CPUs or memory nodes in a cpuset if it "
3767 "can access that cpuset's directory (execute permissions on the each of the "
3768 "parent directories) and write the corresponding I<cpus> or I<mems> file."
3772 #: build/C/man7/cpuset.7:999
3774 "There is one minor difference between the manner in which these permissions "
3775 "are evaluated and the manner in which normal file-system operation "
3776 "permissions are evaluated. The kernel interprets relative pathnames "
3777 "starting at a process's current working directory. Even if one is operating "
3778 "on a cpuset file, relative pathnames are interpreted relative to the "
3779 "process's current working directory, not relative to the process's current "
3780 "cpuset. The only ways that cpuset paths relative to a process's current "
3781 "cpuset can be used are if either the process's current working directory is "
3782 "its cpuset (it first did a B<cd> or B<chdir>(2) to its cpuset directory "
3783 "beneath I</dev/cpuset>, which is a bit unusual) or if some user code "
3784 "converts the relative cpuset path to a full file-system path."
3787 #. ================== WARNINGS ==================
3789 #: build/C/man7/cpuset.7:1014
3791 "In theory, this means that user code should specify cpusets using absolute "
3792 "pathnames, which requires knowing the mount point of the cpuset file system "
3793 "(usually, but not necessarily, I</dev/cpuset>). In practice, all user level "
3794 "code that this author is aware of simply assumes that if the cpuset file "
3795 "system is mounted, then it is mounted at I</dev/cpuset>. Furthermore, it is "
3796 "common practice for carefully written user code to verify the presence of "
3797 "the pseudo-file I</dev/cpuset/tasks> in order to verify that the cpuset "
3798 "pseudo-file system is currently mounted."
3802 #: build/C/man7/cpuset.7:1014
3808 #: build/C/man7/cpuset.7:1015
3810 msgid "Enabling memory_pressure"
3814 #: build/C/man7/cpuset.7:1024
3816 "By default, the per-cpuset file I<memory_pressure> always contains zero "
3817 "(0). Unless this feature is enabled by writing \"1\" to the pseudo-file "
3818 "I</dev/cpuset/memory_pressure_enabled>, the kernel does not compute "
3819 "per-cpuset I<memory_pressure>."
3823 #: build/C/man7/cpuset.7:1024
3825 msgid "Using the echo command"
3828 #. Gack! csh(1)'s echo does this
3830 #: build/C/man7/cpuset.7:1035
3832 "When using the B<echo> command at the shell prompt to change the values of "
3833 "cpuset files, beware that the built-in B<echo> command in some shells does "
3834 "not display an error message if the B<write>(2) system call fails. For "
3835 "example, if the command:"
3839 #: build/C/man7/cpuset.7:1039
3841 msgid "echo 19 E<gt> mems\n"
3845 #: build/C/man7/cpuset.7:1052
3847 "failed because memory node 19 was not allowed (perhaps the current system "
3848 "does not have a memory node 19), then the B<echo> command might not display "
3849 "any error. It is better to use the B</bin/echo> external command to change "
3850 "cpuset file settings, as this command will display B<write>(2) errors, as "
3855 #: build/C/man7/cpuset.7:1057
3858 "/bin/echo 19 E<gt> mems\n"
3859 "/bin/echo: write error: Invalid argument\n"
3862 #. ================== EXCEPTIONS ==================
3864 #: build/C/man7/cpuset.7:1060
3870 #: build/C/man7/cpuset.7:1061
3872 msgid "Memory placement"
3876 #: build/C/man7/cpuset.7:1064
3878 "Not all allocations of system memory are constrained by cpusets, for the "
3879 "following reasons."
3883 #: build/C/man7/cpuset.7:1079
3885 "If hot-plug functionality is used to remove all the CPUs that are currently "
3886 "assigned to a cpuset, then the kernel will automatically update the "
3887 "I<cpus_allowed> of all processes attached to CPUs in that cpuset to allow "
3888 "all CPUs. When memory hot-plug functionality for removing memory nodes is "
3889 "available, a similar exception is expected to apply there as well. In "
3890 "general, the kernel prefers to violate cpuset placement, rather than "
3891 "starving a process that has had all its allowed CPUs or memory nodes taken "
3892 "offline. User code should reconfigure cpusets to only refer to online CPUs "
3893 "and memory nodes when using hot-plug to add or remove such resources."
3897 #: build/C/man7/cpuset.7:1087
3899 "A few kernel-critical, internal memory-allocation requests, marked "
3900 "GFP_ATOMIC, must be satisfied immediately. The kernel may drop some request "
3901 "or malfunction if one of these allocations fail. If such a request cannot "
3902 "be satisfied within the current process's cpuset, then we relax the cpuset, "
3903 "and look for memory anywhere we can find it. It's better to violate the "
3904 "cpuset than stress the kernel."
3908 #: build/C/man7/cpuset.7:1091
3910 "Allocations of memory requested by kernel drivers while processing an "
3911 "interrupt lack any relevant process context, and are not confined by "
3916 #: build/C/man7/cpuset.7:1091
3918 msgid "Renaming cpusets"
3921 #. ================== ERRORS ==================
3923 #: build/C/man7/cpuset.7:1099
3925 "You can use the B<rename>(2) system call to rename cpusets. Only simple "
3926 "renaming is supported; that is, changing the name of a cpuset directory is "
3927 "permitted, but moving a directory into a different directory is not "
3932 #: build/C/man7/cpuset.7:1103
3934 "The Linux kernel implementation of cpusets sets I<errno> to specify the "
3935 "reason for a failed system call affecting cpusets."
3939 #: build/C/man7/cpuset.7:1108
3941 "The possible I<errno> settings and their meaning when set on a failed cpuset "
3942 "call are as listed below."
3946 #: build/C/man7/cpuset.7:1108
3952 #: build/C/man7/cpuset.7:1115
3954 "Attempted a B<write>(2) on a special cpuset file with a length larger than "
3955 "some kernel-determined upper limit on the length of such writes."
3959 #: build/C/man7/cpuset.7:1122
3961 "Attempted to B<write>(2) the process ID (PID) of a process to a cpuset "
3962 "I<tasks> file when one lacks permission to move that process."
3966 #: build/C/man7/cpuset.7:1128
3968 "Attempted to add, using B<write>(2), a CPU or memory node to a cpuset, when "
3969 "that CPU or memory node was not already in its parent."
3973 #: build/C/man7/cpuset.7:1136
3975 "Attempted to set, using B<write>(2), I<cpu_exclusive> or I<mem_exclusive> on "
3976 "a cpuset whose parent lacks the same setting."
3980 #: build/C/man7/cpuset.7:1143
3981 msgid "Attempted to B<write>(2) a I<memory_pressure> file."
3985 #: build/C/man7/cpuset.7:1146
3986 msgid "Attempted to create a file in a cpuset directory."
3990 #: build/C/man7/cpuset.7:1146 build/C/man7/cpuset.7:1151 build/C/man7/cpuset.7:1156
3996 #: build/C/man7/cpuset.7:1151
3997 msgid "Attempted to remove, using B<rmdir>(2), a cpuset with attached processes."
4001 #: build/C/man7/cpuset.7:1156
4002 msgid "Attempted to remove, using B<rmdir>(2), a cpuset with child cpusets."
4006 #: build/C/man7/cpuset.7:1161
4008 "Attempted to remove a CPU or memory node from a cpuset that is also in a "
4009 "child of that cpuset."
4013 #: build/C/man7/cpuset.7:1161 build/C/man7/cpuset.7:1166
4019 #: build/C/man7/cpuset.7:1166
4020 msgid "Attempted to create, using B<mkdir>(2), a cpuset that already exists."
4024 #: build/C/man7/cpuset.7:1171
4025 msgid "Attempted to B<rename>(2) a cpuset to a name that already exists."
4029 #: build/C/man7/cpuset.7:1179
4031 "Attempted to B<read>(2) or B<write>(2) a cpuset file using a buffer that "
4032 "is outside the writing processes accessible address space."
4036 #: build/C/man7/cpuset.7:1188
4038 "Attempted to change a cpuset, using B<write>(2), in a way that would violate "
4039 "a I<cpu_exclusive> or I<mem_exclusive> attribute of that cpuset or any of "
4044 #: build/C/man7/cpuset.7:1197
4046 "Attempted to B<write>(2) an empty I<cpus> or I<mems> list to a cpuset which "
4047 "has attached processes or child cpusets."
4051 #: build/C/man7/cpuset.7:1207
4053 "Attempted to B<write>(2) a I<cpus> or I<mems> list which included a range "
4054 "with the second number smaller than the first number."
4058 #: build/C/man7/cpuset.7:1216
4060 "Attempted to B<write>(2) a I<cpus> or I<mems> list which included an "
4061 "invalid character in the string."
4065 #: build/C/man7/cpuset.7:1223
4067 "Attempted to B<write>(2) a list to a I<cpus> file that did not include any "
4072 #: build/C/man7/cpuset.7:1230
4074 "Attempted to B<write>(2) a list to a I<mems> file that did not include any "
4075 "online memory nodes."
4079 #: build/C/man7/cpuset.7:1237
4081 "Attempted to B<write>(2) a list to a I<mems> file that included a node that "
4086 #: build/C/man7/cpuset.7:1245
4088 "Attempted to B<write>(2) a string to a cpuset I<tasks> file that does not "
4089 "begin with an ASCII decimal integer."
4093 #: build/C/man7/cpuset.7:1250
4094 msgid "Attempted to B<rename>(2) a cpuset into a different directory."
4098 #: build/C/man7/cpuset.7:1257
4100 "Attempted to B<read>(2) a I</proc/E<lt>pidE<gt>/cpuset> file for a cpuset "
4101 "path that is longer than the kernel page size."
4105 #: build/C/man7/cpuset.7:1262
4107 "Attempted to create, using B<mkdir>(2), a cpuset whose base directory name "
4108 "is longer than 255 characters."
4112 #: build/C/man7/cpuset.7:1269
4114 "Attempted to create, using B<mkdir>(2), a cpuset whose full pathname, "
4115 "including the mount point (typically \"/dev/cpuset/\") prefix, is longer "
4116 "than 4095 characters."
4120 #: build/C/man7/cpuset.7:1269
4126 #: build/C/man7/cpuset.7:1274
4128 "The cpuset was removed by another process at the same time as a B<write>(2) "
4129 "was attempted on one of the pseudo-files in the cpuset directory."
4133 #: build/C/man7/cpuset.7:1279
4135 "Attempted to create, using B<mkdir>(2), a cpuset in a parent cpuset that "
4140 #: build/C/man7/cpuset.7:1286
4142 "Attempted to B<access>(2) or B<open>(2) a nonexistent file in a cpuset "
4147 #: build/C/man7/cpuset.7:1291
4149 "Insufficient memory is available within the kernel; can occur on a variety "
4150 "of system calls affecting cpusets, but only if the system is extremely short "
4155 #: build/C/man7/cpuset.7:1291 build/C/man7/cpuset.7:1303
4161 #: build/C/man7/cpuset.7:1303
4163 "Attempted to B<write>(2) the process ID (PID) of a process to a cpuset "
4164 "I<tasks> file when the cpuset had an empty I<cpus> or empty I<mems> setting."
4168 #: build/C/man7/cpuset.7:1313
4170 "Attempted to B<write>(2) an empty I<cpus> or I<mems> setting to a cpuset "
4171 "that has tasks attached."
4175 #: build/C/man7/cpuset.7:1318
4176 msgid "Attempted to B<rename>(2) a nonexistent cpuset."
4180 #: build/C/man7/cpuset.7:1321
4181 msgid "Attempted to remove a file from a cpuset directory."
4185 #: build/C/man7/cpuset.7:1321
4191 #: build/C/man7/cpuset.7:1329
4193 "Specified a I<cpus> or I<mems> list to the kernel which included a number "
4194 "too large for the kernel to set in its bitmasks."
4197 #. ================== VERSIONS ==================
4199 #: build/C/man7/cpuset.7:1337
4201 "Attempted to B<write>(2) the process ID (PID) of a nonexistent process to a "
4202 "cpuset I<tasks> file."
4205 #. ================== NOTES ==================
4207 #: build/C/man7/cpuset.7:1340
4208 msgid "Cpusets appeared in version 2.6.12 of the Linux kernel."
4211 #. ================== BUGS ==================
4213 #: build/C/man7/cpuset.7:1351
4215 "Despite its name, the I<pid> parameter is actually a thread ID, and each "
4216 "thread in a threaded group can be attached to a different cpuset. The value "
4217 "returned from a call to B<gettid>(2) can be passed in the argument I<pid>."
4221 #: build/C/man7/cpuset.7:1351 build/C/man2/getrlimit.2:576 build/C/man2/ioprio_set.2:308 build/C/man2/setfsgid.2:102 build/C/man2/setfsuid.2:102
4226 #. ================== EXAMPLE ==================
4228 #: build/C/man7/cpuset.7:1364
4230 "I<memory_pressure> cpuset files can be opened for writing, creation, or "
4231 "truncation, but then the B<write>(2) fails with I<errno> set to B<EACCES>, "
4232 "and the creation and truncation options on B<open>(2) have no effect."
4236 #: build/C/man7/cpuset.7:1364 build/C/man2/getrlimit.2:520
4242 #: build/C/man7/cpuset.7:1367
4244 "The following examples demonstrate querying and setting cpuset options using "
4249 #: build/C/man7/cpuset.7:1367
4251 msgid "Creating and attaching to a cpuset."
4255 #: build/C/man7/cpuset.7:1370
4257 "To create a new cpuset and attach the current command shell to it, the steps "
4262 #: build/C/man7/cpuset.7:1372 build/C/man7/cpuset.7:1411
4268 #: build/C/man7/cpuset.7:1374
4269 msgid "mkdir /dev/cpuset (if not already done)"
4273 #: build/C/man7/cpuset.7:1374 build/C/man7/cpuset.7:1417
4279 #: build/C/man7/cpuset.7:1376
4280 msgid "mount -t cpuset none /dev/cpuset (if not already done)"
4284 #: build/C/man7/cpuset.7:1376 build/C/man7/cpuset.7:1420
4290 #: build/C/man7/cpuset.7:1379
4291 msgid "Create the new cpuset using B<mkdir>(1)."
4295 #: build/C/man7/cpuset.7:1379 build/C/man7/cpuset.7:1423
4301 #: build/C/man7/cpuset.7:1381
4302 msgid "Assign CPUs and memory nodes to the new cpuset."
4306 #: build/C/man7/cpuset.7:1381 build/C/man7/cpuset.7:1428
4312 #: build/C/man7/cpuset.7:1383
4313 msgid "Attach the shell to the new cpuset."
4317 #: build/C/man7/cpuset.7:1388
4319 "For example, the following sequence of commands will set up a cpuset named "
4320 "\"Charlie\", containing just CPUs 2 and 3, and memory node 1, and then "
4321 "attach the current shell to that cpuset."
4325 #: build/C/man7/cpuset.7:1402
4328 "$B< mkdir /dev/cpuset>\n"
4329 "$B< mount -t cpuset cpuset /dev/cpuset>\n"
4330 "$B< cd /dev/cpuset>\n"
4331 "$B< mkdir Charlie>\n"
4333 "$B< /bin/echo 2-3 E<gt> cpus>\n"
4334 "$B< /bin/echo 1 E<gt> mems>\n"
4335 "$B< /bin/echo $$ E<gt> tasks>\n"
4336 "# The current shell is now running in cpuset Charlie\n"
4337 "# The next line should display '/Charlie'\n"
4338 "$B< cat /proc/self/cpuset>\n"
4342 #: build/C/man7/cpuset.7:1404
4344 msgid "Migrating a job to different memory nodes."
4348 #: build/C/man7/cpuset.7:1409
4350 "To migrate a job (the set of processes attached to a cpuset) to different "
4351 "CPUs and memory nodes in the system, including moving the memory pages "
4352 "currently allocated to that job, perform the following steps."
4356 #: build/C/man7/cpuset.7:1417
4358 "Let's say we want to move the job in cpuset I<alpha> (CPUs 4-7 and memory "
4359 "nodes 2-3) to a new cpuset I<beta> (CPUs 16-19 and memory nodes 8-9)."
4363 #: build/C/man7/cpuset.7:1420
4364 msgid "First create the new cpuset I<beta>."
4368 #: build/C/man7/cpuset.7:1423
4369 msgid "Then allow CPUs 16-19 and memory nodes 8-9 in I<beta>."
4373 #: build/C/man7/cpuset.7:1428
4374 msgid "Then enable I<memory_migration> in I<beta>."
4378 #: build/C/man7/cpuset.7:1433
4379 msgid "Then move each process from I<alpha> to I<beta>."
4383 #: build/C/man7/cpuset.7:1436
4384 msgid "The following sequence of commands accomplishes this."
4388 #: build/C/man7/cpuset.7:1446
4391 "$B< cd /dev/cpuset>\n"
4394 "$B< /bin/echo 16-19 E<gt> cpus>\n"
4395 "$B< /bin/echo 8-9 E<gt> mems>\n"
4396 "$B< /bin/echo 1 E<gt> memory_migrate>\n"
4397 "$B< while read i; do /bin/echo $i; done E<lt> ../alpha/tasks E<gt> tasks>\n"
4401 #: build/C/man7/cpuset.7:1455
4403 "The above should move any processes in I<alpha> to I<beta>, and any memory "
4404 "held by these processes on memory nodes 2-3 to memory nodes 8-9, "
4409 #: build/C/man7/cpuset.7:1457
4410 msgid "Notice that the last step of the above sequence did not do:"
4414 #: build/C/man7/cpuset.7:1461
4416 msgid "$B< cp ../alpha/tasks tasks>\n"
4420 #: build/C/man7/cpuset.7:1472
4422 "The I<while> loop, rather than the seemingly easier use of the B<cp>(1) "
4423 "command, was necessary because only one process PID at a time may be written "
4424 "to the I<tasks> file."
4428 #: build/C/man7/cpuset.7:1480
4430 "The same effect (writing one PID at a time) as the I<while> loop can be "
4431 "accomplished more efficiently, in fewer keystrokes and in syntax that works "
4432 "on any shell, but alas more obscurely, by using the B<-u> (unbuffered) "
4433 "option of B<sed>(1):"
4437 #: build/C/man7/cpuset.7:1484
4439 msgid "$B< sed -un p E<lt> ../alpha/tasks E<gt> tasks>\n"
4443 #: build/C/man7/cpuset.7:1501
4445 "B<taskset>(1), B<get_mempolicy>(2), B<getcpu>(2), B<mbind>(2), "
4446 "B<sched_getaffinity>(2), B<sched_setaffinity>(2), B<sched_setscheduler>(2), "
4447 "B<set_mempolicy>(2), B<CPU_SET>(3), B<proc>(5), B<numa>(7), "
4448 "B<migratepages>(8), B<numactl>(8)"
4452 #: build/C/man7/cpuset.7:1504
4453 msgid "The kernel source file I<Documentation/cpusets.txt>."
4457 #: build/C/man7/credentials.7:25
4463 #: build/C/man7/credentials.7:25
4469 #: build/C/man7/credentials.7:28
4470 msgid "credentials - process identifiers"
4474 #: build/C/man7/credentials.7:29
4476 msgid "Process ID (PID)"
4480 #: build/C/man7/credentials.7:39
4482 "Each process has a unique nonnegative integer identifier that is assigned "
4483 "when the process is created using B<fork>(2). A process can obtain its PID "
4484 "using B<getpid>(2). A PID is represented using the type I<pid_t> (defined "
4485 "in I<E<lt>sys/types.hE<gt>>)."
4488 #. .BR sched_rr_get_interval (2),
4489 #. .BR sched_getaffinity (2),
4490 #. .BR sched_setaffinity (2),
4491 #. .BR sched_getparam (2),
4492 #. .BR sched_setparam (2),
4493 #. .BR sched_setscheduler (2),
4494 #. .BR sched_getscheduler (2),
4499 #: build/C/man7/credentials.7:60
4501 "PIDs are used in a range of system calls to identify the process affected by "
4502 "the call, for example: B<kill>(2), B<ptrace>(2), B<setpriority>(2) "
4503 "B<setpgid>(2), B<setsid>(2), B<sigqueue>(3), and B<waitpid>(2)."
4507 #: build/C/man7/credentials.7:63
4508 msgid "A process's PID is preserved across an B<execve>(2)."
4512 #: build/C/man7/credentials.7:63
4514 msgid "Parent Process ID (PPID)"
4518 #: build/C/man7/credentials.7:71
4520 "A process's parent process ID identifies the process that created this "
4521 "process using B<fork>(2). A process can obtain its PPID using "
4522 "B<getppid>(2). A PPID is represented using the type I<pid_t>."
4526 #: build/C/man7/credentials.7:74
4527 msgid "A process's PPID is preserved across an B<execve>(2)."
4531 #: build/C/man7/credentials.7:74
4533 msgid "Process Group ID and Session ID"
4537 #: build/C/man7/credentials.7:82
4539 "Each process has a session ID and a process group ID, both represented using "
4540 "the type I<pid_t>. A process can obtain its session ID using B<getsid>(2), "
4541 "and its process group ID using B<getpgrp>(2)."
4545 #: build/C/man7/credentials.7:88
4547 "A child created by B<fork>(2) inherits its parent's session ID and process "
4548 "group ID. A process's session ID and process group ID are preserved across "
4553 #: build/C/man7/credentials.7:101
4555 "Sessions and process groups are abstractions devised to support shell job "
4556 "control. A process group (sometimes called a \"job\") is a collection of "
4557 "processes that share the same process group ID; the shell creates a new "
4558 "process group for the process(es) used to execute single command or pipeline "
4559 "(e.g., the two processes created to execute the command \"ls\\ |\\ wc\" are "
4560 "placed in the same process group). A process's group membership can be set "
4561 "using B<setpgid>(2). The process whose process ID is the same as its "
4562 "process group ID is the I<process group leader> for that group."
4566 #: build/C/man7/credentials.7:113
4568 "A session is a collection of processes that share the same session ID. All "
4569 "of the members of a process group also have the same session ID (i.e., all "
4570 "of the members of a process group always belong to the same session, so that "
4571 "sessions and process groups form a strict two-level hierarchy of processes.) "
4572 "A new session is created when a process calls B<setsid>(2), which creates a "
4573 "new session whose session ID is the same as the PID of the process that "
4574 "called B<setsid>(2). The creator of the session is called the I<session "
4579 #: build/C/man7/credentials.7:113
4581 msgid "User and Group Identifiers"
4585 #: build/C/man7/credentials.7:121
4587 "Each process has various associated user and groups IDs. These IDs are "
4588 "integers, respectively represented using the types I<uid_t> and I<gid_t> "
4589 "(defined in I<E<lt>sys/types.hE<gt>>)."
4593 #: build/C/man7/credentials.7:123
4594 msgid "On Linux, each process has the following user and group identifiers:"
4598 #: build/C/man7/credentials.7:129
4600 "Real user ID and real group ID. These IDs determine who owns the process. "
4601 "A process can obtain its real user (group) ID using B<getuid>(2) "
4606 #: build/C/man7/credentials.7:141
4608 "Effective user ID and effective group ID. These IDs are used by the kernel "
4609 "to determine the permissions that the process will have when accessing "
4610 "shared resources such as message queues, shared memory, and semaphores. On "
4611 "most UNIX systems, these IDs also determine the permissions when accessing "
4612 "files. However, Linux uses the file system IDs described below for this "
4613 "task. A process can obtain its effective user (group) ID using "
4614 "B<geteuid>(2) (B<getegid>(2))."
4618 #: build/C/man7/credentials.7:163
4620 "Saved set-user-ID and saved set-group-ID. These IDs are used in set-user-ID "
4621 "and set-group-ID programs to save a copy of the corresponding effective IDs "
4622 "that were set when the program was executed (see B<execve>(2)). A "
4623 "set-user-ID program can assume and drop privileges by switching its "
4624 "effective user ID back and forth between the values in its real user ID and "
4625 "saved set-user-ID. This switching is done via calls to B<seteuid>(2), "
4626 "B<setreuid>(2), or B<setresuid>(2). A set-group-ID program performs the "
4627 "analogous tasks using B<setegid>(2), B<setregid>(2), or B<setresgid>(2). A "
4628 "process can obtain its saved set-user-ID (set-group-ID) using "
4629 "B<getresuid>(2) (B<getresgid>(2))."
4633 #: build/C/man7/credentials.7:180
4635 "File system user ID and file system group ID (Linux-specific). These IDs, "
4636 "in conjunction with the supplementary group IDs described below, are used to "
4637 "determine permissions for accessing files; see B<path_resolution>(7) for "
4638 "details. Whenever a process's effective user (group) ID is changed, the "
4639 "kernel also automatically changes the file system user (group) ID to the "
4640 "same value. Consequently, the file system IDs normally have the same values "
4641 "as the corresponding effective ID, and the semantics for file-permission "
4642 "checks are thus the same on Linux as on other UNIX systems. The file system "
4643 "IDs can be made to differ from the effective IDs by calling B<setfsuid>(2) "
4644 "and B<setfsgid>(2)."
4647 #. Since kernel 2.6.4, the limit is visible via the read-only file
4648 #. /proc/sys/kernel/ngroups_max.
4649 #. As at 2.6.22-rc2, this file is still read-only.
4651 #: build/C/man7/credentials.7:199
4653 "Supplementary group IDs. This is a set of additional group IDs that are "
4654 "used for permission checks when accessing files and other shared resources. "
4655 "On Linux kernels before 2.6.4, a process can be a member of up to 32 "
4656 "supplementary groups; since kernel 2.6.4, a process can be a member of up to "
4657 "65536 supplementary groups. The call I<sysconf(_SC_NGROUPS_MAX)> can be "
4658 "used to determine the number of supplementary groups of which a process may "
4659 "be a member. A process can obtain its set of supplementary group IDs using "
4660 "B<getgroups>(2), and can modify the set using B<setgroups>(2)."
4664 #: build/C/man7/credentials.7:209
4666 "A child process created by B<fork>(2) inherits copies of its parent's user "
4667 "and groups IDs. During an B<execve>(2), a process's real user and group ID "
4668 "and supplementary group IDs are preserved; the effective and saved set IDs "
4669 "may be changed, as described in B<execve>(2)."
4673 #: build/C/man7/credentials.7:212
4675 "Aside from the purposes noted above, a process's user IDs are also employed "
4676 "in a number of other contexts:"
4680 #: build/C/man7/credentials.7:215
4681 msgid "when determining the permissions for sending signals\\(emsee B<kill>(2);"
4685 #: build/C/man7/credentials.7:225
4687 "when determining the permissions for setting process-scheduling parameters "
4688 "(nice value, real time scheduling policy and priority, CPU affinity, I/O "
4689 "priority) using B<setpriority>(2), B<sched_setaffinity>(2), "
4690 "B<sched_setscheduler>(2), B<sched_setparam>(2), and B<ioprio_set>(2);"
4694 #: build/C/man7/credentials.7:228
4695 msgid "when checking resource limits; see B<getrlimit>(2);"
4699 #: build/C/man7/credentials.7:232
4701 "when checking the limit on the number of inotify instances that the process "
4702 "may create; see B<inotify>(7)."
4706 #: build/C/man7/credentials.7:238
4708 "Process IDs, parent process IDs, process group IDs, and session IDs are "
4709 "specified in POSIX.1-2001. The real, effective, and saved set user and "
4710 "groups IDs, and the supplementary group IDs, are specified in POSIX.1-2001. "
4711 "The file system user and group IDs are a Linux extension."
4715 #: build/C/man7/credentials.7:250
4717 "The POSIX threads specification requires that credentials are shared by all "
4718 "of the threads in a process. However, at the kernel level, Linux maintains "
4719 "separate user and group credentials for each thread. The NPTL threading "
4720 "implementation does some work to ensure that any change to user or group "
4721 "credentials (e.g., calls to B<setuid>(2), B<setresuid>(2), etc.) is carried "
4722 "through to all of the POSIX threads in a process."
4726 #: build/C/man7/credentials.7:281
4728 "B<bash>(1), B<csh>(1), B<ps>(1), B<access>(2), B<execve>(2), "
4729 "B<faccessat>(2), B<fork>(2), B<getpgrp>(2), B<getpid>(2), B<getppid>(2), "
4730 "B<getsid>(2), B<kill>(2), B<killpg>(2), B<setegid>(2), B<seteuid>(2), "
4731 "B<setfsgid>(2), B<setfsuid>(2), B<setgid>(2), B<setgroups>(2), "
4732 "B<setresgid>(2), B<setresuid>(2), B<setuid>(2), B<waitpid>(2), "
4733 "B<euidaccess>(3), B<initgroups>(3), B<tcgetpgrp>(3), B<tcsetpgrp>(3), "
4734 "B<capabilities>(7), B<path_resolution>(7), B<unix>(7)"
4738 #: build/C/man2/getgid.2:25
4744 #: build/C/man2/getgid.2:25 build/C/man2/getgroups.2:31 build/C/man2/getresuid.2:27 build/C/man2/getuid.2:26 build/C/man2/setfsgid.2:29 build/C/man2/setfsuid.2:29 build/C/man2/setgid.2:27 build/C/man2/setresuid.2:26 build/C/man2/setreuid.2:43 build/C/man2/setuid.2:28
4750 #: build/C/man2/getgid.2:28
4751 msgid "getgid, getegid - get group identity"
4755 #: build/C/man2/getgid.2:30 build/C/man2/getgroups.2:38 build/C/man2/getpid.2:30 build/C/man2/getresuid.2:34 build/C/man2/getsid.2:30 build/C/man2/getuid.2:31 build/C/man2/seteuid.2:34 build/C/man2/setgid.2:34 build/C/man2/setpgid.2:51 build/C/man2/setresuid.2:33 build/C/man2/setreuid.2:50 build/C/man2/setsid.2:35 build/C/man2/setuid.2:35
4756 msgid "B<#include E<lt>unistd.hE<gt>>"
4760 #: build/C/man2/getgid.2:32 build/C/man2/getgroups.2:36 build/C/man2/getpid.2:28 build/C/man2/getuid.2:33 build/C/man2/seteuid.2:32 build/C/man2/setgid.2:32 build/C/man2/setreuid.2:48 build/C/man2/setuid.2:33
4761 msgid "B<#include E<lt>sys/types.hE<gt>>"
4765 #: build/C/man2/getgid.2:34
4766 msgid "B<gid_t getgid(void);>"
4770 #: build/C/man2/getgid.2:36
4771 msgid "B<gid_t getegid(void);>"
4775 #: build/C/man2/getgid.2:39
4776 msgid "B<getgid>() returns the real group ID of the calling process."
4780 #: build/C/man2/getgid.2:42
4781 msgid "B<getegid>() returns the effective group ID of the calling process."
4785 #: build/C/man2/getgid.2:44 build/C/man2/getpid.2:44 build/C/man2/getuid.2:45
4786 msgid "These functions are always successful."
4790 #: build/C/man2/getgid.2:46 build/C/man2/getuid.2:47
4791 msgid "POSIX.1-2001, 4.3BSD."
4795 #: build/C/man2/getgid.2:62
4797 "The original Linux B<getgid>() and B<getegid>() system calls supported "
4798 "only 16-bit group IDs. Subsequently, Linux 2.4 added B<getgid32>() and "
4799 "B<getegid32>(), supporting 32-bit IDs. The glibc B<getgid>() and "
4800 "B<getegid>() wrapper functions transparently deal with the variations "
4801 "across kernel versions."
4805 #: build/C/man2/getgid.2:67
4806 msgid "B<getresgid>(2), B<setgid>(2), B<setregid>(2), B<credentials>(7)"
4810 #: build/C/man2/getgroups.2:31
4816 #: build/C/man2/getgroups.2:34
4817 msgid "getgroups, setgroups - get/set list of supplementary group IDs"
4821 #: build/C/man2/getgroups.2:40
4822 msgid "B<int getgroups(int >I<size>B<, gid_t >I<list>B<[]);>"
4826 #: build/C/man2/getgroups.2:42
4827 msgid "B<#include E<lt>grp.hE<gt>>"
4831 #: build/C/man2/getgroups.2:44
4832 msgid "B<int setgroups(size_t >I<size>B<, const gid_t *>I<list>B<);>"
4836 #: build/C/man2/getgroups.2:52
4837 msgid "B<setgroups>(): _BSD_SOURCE"
4841 #: build/C/man2/getgroups.2:70
4843 "B<getgroups>() returns the supplementary group IDs of the calling process "
4844 "in I<list>. The argument I<size> should be set to the maximum number of "
4845 "items that can be stored in the buffer pointed to by I<list>. If the "
4846 "calling process is a member of more than I<size> supplementary groups, then "
4847 "an error results. It is unspecified whether the effective group ID of the "
4848 "calling process is included in the returned list. (Thus, an application "
4849 "should also call B<getegid>(2) and add or remove the resulting value.)"
4853 #: build/C/man2/getgroups.2:81
4855 "If I<size> is zero, I<list> is not modified, but the total number of "
4856 "supplementary group IDs for the process is returned. This allows the caller "
4857 "to determine the size of a dynamically allocated I<list> to be used in a "
4858 "further call to B<getgroups>()."
4862 #: build/C/man2/getgroups.2:92
4864 "B<setgroups>() sets the supplementary group IDs for the calling process. "
4865 "Appropriate privileges (Linux: the B<CAP_SETGID> capability) are required. "
4866 "The I<size> argument specifies the number of supplementary group IDs in the "
4867 "buffer pointed to by I<list>."
4871 #: build/C/man2/getgroups.2:99
4873 "On success, B<getgroups>() returns the number of supplementary group IDs. "
4874 "On error, -1 is returned, and I<errno> is set appropriately."
4878 #: build/C/man2/getgroups.2:106
4880 "On success, B<setgroups>() returns 0. On error, -1 is returned, and "
4881 "I<errno> is set appropriately."
4885 #: build/C/man2/getgroups.2:111
4886 msgid "I<list> has an invalid address."
4890 #: build/C/man2/getgroups.2:114
4891 msgid "B<getgroups>() can additionally fail with the following error:"
4895 #: build/C/man2/getgroups.2:118
4896 msgid "I<size> is less than the number of supplementary group IDs, but is not zero."
4900 #: build/C/man2/getgroups.2:121
4901 msgid "B<setgroups>() can additionally fail with the following errors:"
4905 #: build/C/man2/getgroups.2:127
4907 "I<size> is greater than B<NGROUPS_MAX> (32 before Linux 2.6.4; 65536 since "
4912 #: build/C/man2/getgroups.2:133
4913 msgid "The calling process has insufficient privilege."
4917 #: build/C/man2/getgroups.2:141
4919 "SVr4, 4.3BSD. The B<getgroups>() function is in POSIX.1-2001. Since "
4920 "B<setgroups>() requires privilege, it is not covered by POSIX.1-2001."
4924 #: build/C/man2/getgroups.2:149
4926 "A process can have up to B<NGROUPS_MAX> supplementary group IDs in addition "
4927 "to the effective group ID. The set of supplementary group IDs is inherited "
4928 "from the parent process, and preserved across an B<execve>(2)."
4932 #: build/C/man2/getgroups.2:152
4934 "The maximum number of supplementary group IDs can be found using "
4939 #: build/C/man2/getgroups.2:156
4942 " long ngroups_max;\n"
4943 " ngroups_max = sysconf(_SC_NGROUPS_MAX);\n"
4947 #: build/C/man2/getgroups.2:161
4949 "The maximum return value of B<getgroups>() cannot be larger than one more "
4954 #: build/C/man2/getgroups.2:171
4956 "The original Linux B<getgroups>() system call supported only 16-bit group "
4957 "IDs. Subsequently, Linux 2.4 added B<getgroups32>(), supporting 32-bit "
4958 "IDs. The glibc B<getgroups>() wrapper function transparently deals with "
4959 "the variation across kernel versions."
4963 #: build/C/man2/getgroups.2:178
4965 "B<getgid>(2), B<setgid>(2), B<getgrouplist>(3), B<initgroups>(3), "
4966 "B<capabilities>(7), B<credentials>(7)"
4970 #: build/C/man2/getpid.2:23
4976 #: build/C/man2/getpid.2:23
4982 #: build/C/man2/getpid.2:26
4983 msgid "getpid, getppid - get process identification"
4987 #: build/C/man2/getpid.2:32
4988 msgid "B<pid_t getpid(void);>"
4992 #: build/C/man2/getpid.2:34
4993 msgid "B<pid_t getppid(void);>"
4997 #: build/C/man2/getpid.2:39
4999 "B<getpid>() returns the process ID of the calling process. (This is often "
5000 "used by routines that generate unique temporary filenames.)"
5004 #: build/C/man2/getpid.2:42
5005 msgid "B<getppid>() returns the process ID of the parent of the calling process."
5009 #: build/C/man2/getpid.2:46
5010 msgid "POSIX.1-2001, 4.3BSD, SVr4."
5013 #. The following program demonstrates this "feature":
5015 #. #define _GNU_SOURCE
5016 #. #include <sys/syscall.h>
5017 #. #include <sys/wait.h>
5018 #. #include <stdio.h>
5019 #. #include <stdlib.h>
5020 #. #include <unistd.h>
5023 #. main(int argc, char *argv[])
5025 #. /* The following statement fills the getpid() cache */
5027 #. printf("parent PID = %ld
5028 #. ", (long) getpid());
5030 #. if (syscall(SYS_fork) == 0) {
5031 #. if (getpid() != syscall(SYS_getpid))
5032 #. printf("child getpid() mismatch: getpid()=%ld; "
5033 #. "syscall(SYS_getpid)=%ld
5035 #. (long) getpid(), (long) syscall(SYS_getpid));
5036 #. exit(EXIT_SUCCESS);
5041 #: build/C/man2/getpid.2:98
5043 "Since glibc version 2.3.4, the glibc wrapper function for B<getpid>() "
5044 "caches PIDs, so as to avoid additional system calls when a process calls "
5045 "B<getpid>() repeatedly. Normally this caching is invisible, but its "
5046 "correct operation relies on support in the wrapper functions for B<fork>(2), "
5047 "B<vfork>(2), and B<clone>(2): if an application bypasses the glibc wrappers "
5048 "for these system calls by using B<syscall>(2), then a call to B<getpid>() "
5049 "in the child will return the wrong value (to be precise: it will return the "
5050 "PID of the parent process). See also B<clone>(2) for discussion of a case "
5051 "where B<getpid>() may return the wrong value even when invoking B<clone>(2) "
5052 "via the glibc wrapper function."
5056 #: build/C/man2/getpid.2:108
5058 "B<clone>(2), B<fork>(2), B<kill>(2), B<exec>(3), B<mkstemp>(3), "
5059 "B<tempnam>(3), B<tmpfile>(3), B<tmpnam>(3), B<credentials>(7)"
5063 #: build/C/man2/getpriority.2:46
5069 #: build/C/man2/getpriority.2:46
5075 #: build/C/man2/getpriority.2:49
5076 msgid "getpriority, setpriority - get/set program scheduling priority"
5080 #: build/C/man2/getpriority.2:51 build/C/man2/getrlimit.2:69 build/C/man2/getrusage.2:44
5081 msgid "B<#include E<lt>sys/time.hE<gt>>"
5085 #: build/C/man2/getpriority.2:53 build/C/man2/getrlimit.2:71 build/C/man2/getrusage.2:46
5086 msgid "B<#include E<lt>sys/resource.hE<gt>>"
5090 #: build/C/man2/getpriority.2:55
5091 msgid "B<int getpriority(int >I<which>B<, int >I<who>B<);>"
5095 #: build/C/man2/getpriority.2:57
5096 msgid "B<int setpriority(int >I<which>B<, int >I<who>B<, int >I<prio>B<);>"
5100 #: build/C/man2/getpriority.2:68
5102 "The scheduling priority of the process, process group, or user, as indicated "
5103 "by I<which> and I<who> is obtained with the B<getpriority>() call and set "
5104 "with the B<setpriority>() call."
5108 #: build/C/man2/getpriority.2:95
5110 "The value I<which> is one of B<PRIO_PROCESS>, B<PRIO_PGRP>, or B<PRIO_USER>, "
5111 "and I<who> is interpreted relative to I<which> (a process identifier for "
5112 "B<PRIO_PROCESS>, process group identifier for B<PRIO_PGRP>, and a user ID "
5113 "for B<PRIO_USER>). A zero value for I<who> denotes (respectively) the "
5114 "calling process, the process group of the calling process, or the real user "
5115 "ID of the calling process. I<Prio> is a value in the range -20 to 19 (but "
5116 "see the Notes below). The default priority is 0; lower priorities cause "
5117 "more favorable scheduling."
5121 #: build/C/man2/getpriority.2:105
5123 "The B<getpriority>() call returns the highest priority (lowest numerical "
5124 "value) enjoyed by any of the specified processes. The B<setpriority>() "
5125 "call sets the priorities of all of the specified processes to the specified "
5126 "value. Only the superuser may lower priorities."
5130 #: build/C/man2/getpriority.2:118
5132 "Since B<getpriority>() can legitimately return the value -1, it is "
5133 "necessary to clear the external variable I<errno> prior to the call, then "
5134 "check it afterward to determine if -1 is an error or a legitimate value. "
5135 "The B<setpriority>() call returns 0 if there is no error, or -1 if there "
5140 #: build/C/man2/getpriority.2:127
5141 msgid "I<which> was not one of B<PRIO_PROCESS>, B<PRIO_PGRP>, or B<PRIO_USER>."
5145 #: build/C/man2/getpriority.2:134
5146 msgid "No process was located using the I<which> and I<who> values specified."
5150 #: build/C/man2/getpriority.2:138
5151 msgid "In addition to the errors indicated above, B<setpriority>() may fail if:"
5155 #: build/C/man2/getpriority.2:150
5157 "The caller attempted to lower a process priority, but did not have the "
5158 "required privilege (on Linux: did not have the B<CAP_SYS_NICE> capability). "
5159 "Since Linux 2.6.12, this error only occurs if the caller attempts to set a "
5160 "process priority outside the range of the B<RLIMIT_NICE> soft resource limit "
5161 "of the target process; see B<getrlimit>(2) for details."
5165 #: build/C/man2/getpriority.2:158
5167 "A process was located, but its effective user ID did not match either the "
5168 "effective or the real user ID of the caller, and was not privileged (on "
5169 "Linux: did not have the B<CAP_SYS_NICE> capability). But see NOTES below."
5173 #: build/C/man2/getpriority.2:161
5174 msgid "SVr4, 4.4BSD (these function calls first appeared in 4.2BSD), POSIX.1-2001."
5178 #: build/C/man2/getpriority.2:167
5180 "A child created by B<fork>(2) inherits its parent's nice value. The nice "
5181 "value is preserved across B<execve>(2)."
5185 #: build/C/man2/getpriority.2:178
5187 "The degree to which their relative nice value affects the scheduling of "
5188 "processes varies across UNIX systems, and, on Linux, across kernel "
5189 "versions. Starting with kernel 2.6.23, Linux adopted an algorithm that "
5190 "causes relative differences in nice values to have a much stronger effect. "
5191 "This causes very low nice values (+19) to truly provide little CPU to a "
5192 "process whenever there is any other higher priority load on the system, and "
5193 "makes high nice values (-20) deliver most of the CPU to applications that "
5194 "require it (e.g., some audio applications)."
5198 #: build/C/man2/getpriority.2:193
5200 "The details on the condition for B<EPERM> depend on the system. The above "
5201 "description is what POSIX.1-2001 says, and seems to be followed on all "
5202 "System V-like systems. Linux kernels before 2.6.12 required the real or "
5203 "effective user ID of the caller to match the real user of the process I<who> "
5204 "(instead of its effective user ID). Linux 2.6.12 and later require the "
5205 "effective user ID of the caller to match the real or effective user ID of "
5206 "the process I<who>. All BSD-like systems (SunOS 4.1.3, Ultrix 4.2, 4.3BSD, "
5207 "FreeBSD 4.3, OpenBSD-2.5, ...) behave in the same manner as Linux 2.6.12 and "
5212 #: build/C/man2/getpriority.2:209
5214 "The actual priority range varies between kernel versions. Linux before "
5215 "1.3.36 had -infinity..15. Since kernel 1.3.43 Linux has the range -20..19. "
5216 "Within the kernel, nice values are actually represented using the "
5217 "corresponding range 40..1 (since negative numbers are error codes) and these "
5218 "are the values employed by the B<setpriority>() and B<getpriority>() "
5219 "system calls. The glibc wrapper functions for these system calls handle the "
5220 "translations between the user-land and kernel representations of the nice "
5221 "value according to the formula I<unice\\ =\\ 20\\ -\\ knice>."
5225 #: build/C/man2/getpriority.2:211
5226 msgid "On some systems, the range of nice values is -20..20."
5230 #: build/C/man2/getpriority.2:223
5232 "Including I<E<lt>sys/time.hE<gt>> is not required these days, but increases "
5233 "portability. (Indeed, I<E<lt>sys/resource.hE<gt>> defines the I<rusage> "
5234 "structure with fields of type I<struct timeval> defined in "
5235 "I<E<lt>sys/time.hE<gt>>.)"
5239 #: build/C/man2/getpriority.2:228
5240 msgid "B<nice>(1), B<renice>(1), B<fork>(2), B<capabilities>(7)"
5244 #: build/C/man2/getpriority.2:231
5246 "I<Documentation/scheduler/sched-nice-design.txt> in the kernel source tree "
5247 "(since Linux 2.6.23)."
5251 #: build/C/man2/getresuid.2:27
5257 #: build/C/man2/getresuid.2:30
5258 msgid "getresuid, getresgid - get real, effective and saved user/group IDs"
5262 #: build/C/man2/getresuid.2:32 build/C/man2/setresuid.2:31
5263 msgid "B<#define _GNU_SOURCE> /* See feature_test_macros(7) */"
5267 #: build/C/man2/getresuid.2:36
5268 msgid "B<int getresuid(uid_t *>I<ruid>B<, uid_t *>I<euid>B<, uid_t *>I<suid>B<);>"
5272 #: build/C/man2/getresuid.2:38
5273 msgid "B<int getresgid(gid_t *>I<rgid>B<, gid_t *>I<egid>B<, gid_t *>I<sgid>B<);>"
5277 #: build/C/man2/getresuid.2:49
5279 "B<getresuid>() returns the real UID, the effective UID, and the saved "
5280 "set-user-ID of the calling process, in the arguments I<ruid>, I<euid>, and "
5281 "I<suid>, respectively. B<getresgid>() performs the analogous task for the "
5282 "process's group IDs."
5286 #: build/C/man2/getresuid.2:59
5288 "One of the arguments specified an address outside the calling program's "
5293 #: build/C/man2/getresuid.2:61
5294 msgid "These system calls appeared on Linux starting with kernel 2.1.44."
5298 #: build/C/man2/getresuid.2:66
5300 "The prototypes are given by glibc since version 2.3.2, provided "
5301 "B<_GNU_SOURCE> is defined."
5305 #: build/C/man2/getresuid.2:69 build/C/man2/setresuid.2:86
5306 msgid "These calls are nonstandard; they also appear on HP-UX and some of the BSDs."
5310 #: build/C/man2/getresuid.2:85
5312 "The original Linux B<getresuid>() and B<getresgid>() system calls "
5313 "supported only 16-bit user and group IDs. Subsequently, Linux 2.4 added "
5314 "B<getresuid32>() and B<getresgid32>(), supporting 32-bit IDs. The glibc "
5315 "B<getresuid>() and B<getresgid>() wrapper functions transparently deal "
5316 "with the variations across kernel versions."
5320 #: build/C/man2/getresuid.2:91
5322 "B<getuid>(2), B<setresuid>(2), B<setreuid>(2), B<setuid>(2), "
5327 #: build/C/man2/getrlimit.2:64
5333 #: build/C/man2/getrlimit.2:64
5339 #: build/C/man2/getrlimit.2:67
5340 msgid "getrlimit, setrlimit, prlimit - get/set resource limits"
5344 #: build/C/man2/getrlimit.2:73
5345 msgid "B<int getrlimit(int >I<resource>B<, struct rlimit *>I<rlim>B<);>"
5349 #: build/C/man2/getrlimit.2:75
5350 msgid "B<int setrlimit(int >I<resource>B<, const struct rlimit *>I<rlim>B<);>"
5354 #: build/C/man2/getrlimit.2:78
5356 "B<int prlimit(pid_t >I<pid>B<, int >I<resource>B<, const struct rlimit "
5357 "*>I<new_limit>B<,>"
5361 #: build/C/man2/getrlimit.2:80
5362 msgid "B< struct rlimit *>I<old_limit>B<);>"
5366 #: build/C/man2/getrlimit.2:88
5367 msgid "B<prlimit>(): _GNU_SOURCE && _FILE_OFFSET_BITS == 64"
5371 #: build/C/man2/getrlimit.2:97
5373 "The B<getrlimit>() and B<setrlimit>() system calls get and set resource "
5374 "limits respectively. Each resource has an associated soft and hard limit, "
5375 "as defined by the I<rlimit> structure:"
5379 #: build/C/man2/getrlimit.2:104
5383 " rlim_t rlim_cur; /* Soft limit */\n"
5384 " rlim_t rlim_max; /* Hard limit (ceiling for rlim_cur) */\n"
5389 #: build/C/man2/getrlimit.2:115
5391 "The soft limit is the value that the kernel enforces for the corresponding "
5392 "resource. The hard limit acts as a ceiling for the soft limit: an "
5393 "unprivileged process may only set its soft limit to a value in the range "
5394 "from 0 up to the hard limit, and (irreversibly) lower its hard limit. A "
5395 "privileged process (under Linux: one with the B<CAP_SYS_RESOURCE> "
5396 "capability) may make arbitrary changes to either limit value."
5400 #: build/C/man2/getrlimit.2:122
5402 "The value B<RLIM_INFINITY> denotes no limit on a resource (both in the "
5403 "structure returned by B<getrlimit>() and in the structure passed to "
5408 #: build/C/man2/getrlimit.2:126
5409 msgid "The I<resource> argument must be one of:"
5413 #: build/C/man2/getrlimit.2:126
5415 msgid "B<RLIMIT_AS>"
5418 #. since 2.0.27 / 2.1.12
5420 #: build/C/man2/getrlimit.2:146
5422 "The maximum size of the process's virtual memory (address space) in bytes. "
5423 "This limit affects calls to B<brk>(2), B<mmap>(2) and B<mremap>(2), which "
5424 "fail with the error B<ENOMEM> upon exceeding this limit. Also automatic "
5425 "stack expansion will fail (and generate a B<SIGSEGV> that kills the process "
5426 "if no alternate stack has been made available via B<sigaltstack>(2)). Since "
5427 "the value is a I<long>, on machines with a 32-bit I<long> either this limit "
5428 "is at most 2 GiB, or this resource is unlimited."
5432 #: build/C/man2/getrlimit.2:146
5434 msgid "B<RLIMIT_CORE>"
5438 #: build/C/man2/getrlimit.2:153
5440 "Maximum size of I<core> file. When 0 no core dump files are created. When "
5441 "nonzero, larger dumps are truncated to this size."
5445 #: build/C/man2/getrlimit.2:153
5447 msgid "B<RLIMIT_CPU>"
5451 #: build/C/man2/getrlimit.2:173
5453 "CPU time limit in seconds. When the process reaches the soft limit, it is "
5454 "sent a B<SIGXCPU> signal. The default action for this signal is to "
5455 "terminate the process. However, the signal can be caught, and the handler "
5456 "can return control to the main program. If the process continues to consume "
5457 "CPU time, it will be sent B<SIGXCPU> once per second until the hard limit is "
5458 "reached, at which time it is sent B<SIGKILL>. (This latter point describes "
5459 "Linux behavior. Implementations vary in how they treat processes which "
5460 "continue to consume CPU time after reaching the soft limit. Portable "
5461 "applications that need to catch this signal should perform an orderly "
5462 "termination upon first receipt of B<SIGXCPU>.)"
5466 #: build/C/man2/getrlimit.2:173
5468 msgid "B<RLIMIT_DATA>"
5472 #: build/C/man2/getrlimit.2:184
5474 "The maximum size of the process's data segment (initialized data, "
5475 "uninitialized data, and heap). This limit affects calls to B<brk>(2) and "
5476 "B<sbrk>(2), which fail with the error B<ENOMEM> upon encountering the soft "
5477 "limit of this resource."
5481 #: build/C/man2/getrlimit.2:184
5483 msgid "B<RLIMIT_FSIZE>"
5487 #: build/C/man2/getrlimit.2:196
5489 "The maximum size of files that the process may create. Attempts to extend a "
5490 "file beyond this limit result in delivery of a B<SIGXFSZ> signal. By "
5491 "default, this signal terminates a process, but a process can catch this "
5492 "signal instead, in which case the relevant system call (e.g., B<write>(2), "
5493 "B<truncate>(2)) fails with the error B<EFBIG>."
5497 #: build/C/man2/getrlimit.2:196
5499 msgid "B<RLIMIT_LOCKS> (Early Linux 2.4 only)"
5502 #. to be precise: Linux 2.4.0-test9; no longer in 2.4.25 / 2.5.65
5504 #: build/C/man2/getrlimit.2:204
5506 "A limit on the combined number of B<flock>(2) locks and B<fcntl>(2) leases "
5507 "that this process may establish."
5511 #: build/C/man2/getrlimit.2:204
5513 msgid "B<RLIMIT_MEMLOCK>"
5517 #: build/C/man2/getrlimit.2:242
5519 "The maximum number of bytes of memory that may be locked into RAM. In "
5520 "effect this limit is rounded down to the nearest multiple of the system page "
5521 "size. This limit affects B<mlock>(2) and B<mlockall>(2) and the "
5522 "B<mmap>(2) B<MAP_LOCKED> operation. Since Linux 2.6.9 it also affects the "
5523 "B<shmctl>(2) B<SHM_LOCK> operation, where it sets a maximum on the total "
5524 "bytes in shared memory segments (see B<shmget>(2)) that may be locked by "
5525 "the real user ID of the calling process. The B<shmctl>(2) B<SHM_LOCK> "
5526 "locks are accounted for separately from the per-process memory locks "
5527 "established by B<mlock>(2), B<mlockall>(2), and B<mmap>(2) B<MAP_LOCKED>; a "
5528 "process can lock bytes up to this limit in each of these two categories. In "
5529 "Linux kernels before 2.6.9, this limit controlled the amount of memory that "
5530 "could be locked by a privileged process. Since Linux 2.6.9, no limits are "
5531 "placed on the amount of memory that a privileged process may lock, and this "
5532 "limit instead governs the amount of memory that an unprivileged process may "
5537 #: build/C/man2/getrlimit.2:242
5539 msgid "B<RLIMIT_MSGQUEUE> (Since Linux 2.6.8)"
5543 #: build/C/man2/getrlimit.2:250
5545 "Specifies the limit on the number of bytes that can be allocated for POSIX "
5546 "message queues for the real user ID of the calling process. This limit is "
5547 "enforced for B<mq_open>(3). Each message queue that the user creates counts "
5548 "(until it is removed) against this limit according to the formula:"
5552 #: build/C/man2/getrlimit.2:254
5555 " bytes = attr.mq_maxmsg * sizeof(struct msg_msg *) +\n"
5556 " attr.mq_maxmsg * attr.mq_msgsize\n"
5560 #: build/C/man2/getrlimit.2:262
5562 "where I<attr> is the I<mq_attr> structure specified as the fourth argument "
5567 #: build/C/man2/getrlimit.2:268
5569 "The first addend in the formula, which includes I<sizeof(struct msg_msg *)> "
5570 "(4 bytes on Linux/i386), ensures that the user cannot create an unlimited "
5571 "number of zero-length messages (such messages nevertheless each consume some "
5572 "system memory for bookkeeping overhead)."
5576 #: build/C/man2/getrlimit.2:268
5578 msgid "B<RLIMIT_NICE> (since Linux 2.6.12, but see BUGS below)"
5582 #: build/C/man2/getrlimit.2:281
5584 "Specifies a ceiling to which the process's nice value can be raised using "
5585 "B<setpriority>(2) or B<nice>(2). The actual ceiling for the nice value is "
5586 "calculated as I<20\\ -\\ rlim_cur>. (This strangeness occurs because "
5587 "negative numbers cannot be specified as resource limit values, since they "
5588 "typically have special meanings. For example, B<RLIM_INFINITY> typically is "
5593 #: build/C/man2/getrlimit.2:281
5595 msgid "B<RLIMIT_NOFILE>"
5599 #: build/C/man2/getrlimit.2:295
5601 "Specifies a value one greater than the maximum file descriptor number that "
5602 "can be opened by this process. Attempts (B<open>(2), B<pipe>(2), B<dup>(2), "
5603 "etc.) to exceed this limit yield the error B<EMFILE>. (Historically, this "
5604 "limit was named B<RLIMIT_OFILE> on BSD.)"
5608 #: build/C/man2/getrlimit.2:295
5610 msgid "B<RLIMIT_NPROC>"
5614 #: build/C/man2/getrlimit.2:303
5616 "The maximum number of processes (or, more precisely on Linux, threads) that "
5617 "can be created for the real user ID of the calling process. Upon "
5618 "encountering this limit, B<fork>(2) fails with the error B<EAGAIN>."
5622 #: build/C/man2/getrlimit.2:303
5624 msgid "B<RLIMIT_RSS>"
5627 #. As at kernel 2.6.12, this limit still does nothing in 2.6 though
5628 #. talk of making it do something has surfaced from time to time in LKML
5631 #: build/C/man2/getrlimit.2:315
5633 "Specifies the limit (in pages) of the process's resident set (the number of "
5634 "virtual pages resident in RAM). This limit only has effect in Linux 2.4.x, "
5635 "x E<lt> 30, and there only affects calls to B<madvise>(2) specifying "
5640 #: build/C/man2/getrlimit.2:315
5642 msgid "B<RLIMIT_RTPRIO> (Since Linux 2.6.12, but see BUGS)"
5646 #: build/C/man2/getrlimit.2:322
5648 "Specifies a ceiling on the real-time priority that may be set for this "
5649 "process using B<sched_setscheduler>(2) and B<sched_setparam>(2)."
5653 #: build/C/man2/getrlimit.2:322
5655 msgid "B<RLIMIT_RTTIME> (Since Linux 2.6.25)"
5659 #: build/C/man2/getrlimit.2:334
5661 "Specifies a limit (in microseconds) on the amount of CPU time that a "
5662 "process scheduled under a real-time scheduling policy may consume without "
5663 "making a blocking system call. For the purpose of this limit, each time a "
5664 "process makes a blocking system call, the count of its consumed CPU time is "
5665 "reset to zero. The CPU time count is not reset if the process continues "
5666 "trying to use the CPU but is preempted, its time slice expires, or it calls "
5667 "B<sched_yield>(2)."
5671 #: build/C/man2/getrlimit.2:345
5673 "Upon reaching the soft limit, the process is sent a B<SIGXCPU> signal. If "
5674 "the process catches or ignores this signal and continues consuming CPU time, "
5675 "then B<SIGXCPU> will be generated once each second until the hard limit is "
5676 "reached, at which point the process is sent a B<SIGKILL> signal."
5680 #: build/C/man2/getrlimit.2:348
5682 "The intended use of this limit is to stop a runaway real-time process from "
5683 "locking up the system."
5687 #: build/C/man2/getrlimit.2:348
5689 msgid "B<RLIMIT_SIGPENDING> (Since Linux 2.6.8)"
5692 #. This replaces the /proc/sys/kernel/rtsig-max system-wide limit
5693 #. that was present in kernels <= 2.6.7. MTK Dec 04
5695 #: build/C/man2/getrlimit.2:362
5697 "Specifies the limit on the number of signals that may be queued for the real "
5698 "user ID of the calling process. Both standard and real-time signals are "
5699 "counted for the purpose of checking this limit. However, the limit is only "
5700 "enforced for B<sigqueue>(3); it is always possible to use B<kill>(2) to "
5701 "queue one instance of any of the signals that are not already queued to the "
5706 #: build/C/man2/getrlimit.2:362
5708 msgid "B<RLIMIT_STACK>"
5712 #: build/C/man2/getrlimit.2:370
5714 "The maximum size of the process stack, in bytes. Upon reaching this limit, "
5715 "a B<SIGSEGV> signal is generated. To handle this signal, a process must "
5716 "employ an alternate signal stack (B<sigaltstack>(2))."
5720 #: build/C/man2/getrlimit.2:375
5722 "Since Linux 2.6.23, this limit also determines the amount of space used for "
5723 "the process's command-line arguments and environment variables; for details, "
5728 #: build/C/man2/getrlimit.2:375
5733 #. commit c022a0acad534fd5f5d5f17280f6d4d135e74e81
5734 #. Author: Jiri Slaby <jslaby@suse.cz>
5735 #. Date: Tue May 4 18:03:50 2010 +0200
5737 #: build/C/man2/getrlimit.2:386
5739 "The Linux-specific B<prlimit>() system call combines and extends the "
5740 "functionality of B<setrlimit>() and B<getrlimit>(). It can be used to both "
5741 "set and get the resource limits of an arbitrary process."
5745 #: build/C/man2/getrlimit.2:393
5747 "The I<resource> argument has the same meaning as for B<setrlimit>() and "
5752 #: build/C/man2/getrlimit.2:411
5754 "If the I<new_limit> argument is a not NULL, then the I<rlimit> structure to "
5755 "which it points is used to set new values for the soft and hard limits for "
5756 "I<resource>. If the I<old_limit> argument is a not NULL, then a successful "
5757 "call to B<prlimit>() places the previous soft and hard limits for "
5758 "I<resource> in the I<rlimit> structure pointed to by I<old_limit>."
5761 #. FIXME this permission check is strange
5762 #. Asked about this on LKML, 7 Nov 2010
5763 #. "Inconsistent credential checking in prlimit() syscall"
5765 #: build/C/man2/getrlimit.2:430
5767 "The I<pid> argument specifies the ID of the process on which the call is to "
5768 "operate. If I<pid> is 0, then the call applies to the calling process. To "
5769 "set or get the resources of a process other than itself, the caller must "
5770 "have the B<CAP_SYS_RESOURCE> capability, or the real, effective, and saved "
5771 "set user IDs of the target process must match the real user ID of the caller "
5772 "I<and> the real, effective, and saved set group IDs of the target process "
5773 "must match the real group ID of the caller."
5777 #: build/C/man2/getrlimit.2:435
5779 "On success, these system calls return 0. On error, -1 is returned, and "
5780 "I<errno> is set appropriately."
5784 #: build/C/man2/getrlimit.2:440
5786 "A pointer argument points to a location outside the accessible address "
5791 #: build/C/man2/getrlimit.2:452
5793 "The value specified in I<resource> is not valid; or, for B<setrlimit>() or "
5794 "B<prlimit>(): I<rlim-E<gt>rlim_cur> was greater than I<rlim-E<gt>rlim_max>."
5798 #: build/C/man2/getrlimit.2:464
5800 "An unprivileged process tried to raise the hard limit; the "
5801 "B<CAP_SYS_RESOURCE> capability is required to do this. Or, the caller tried "
5802 "to increase the hard B<RLIMIT_NOFILE> limit above the current kernel maximum "
5803 "(B<NR_OPEN>). Or, the calling process did not have permission to set limits "
5804 "for the process specified by I<pid>."
5808 #: build/C/man2/getrlimit.2:468
5809 msgid "Could not find a process with the ID specified in I<pid>."
5813 #: build/C/man2/getrlimit.2:473
5815 "The B<prlimit>() system call is available since Linux 2.6.36. Library "
5816 "support is available since glibc 2.13."
5820 #: build/C/man2/getrlimit.2:477
5821 msgid "B<getrlimit>(), B<setrlimit>(): SVr4, 4.3BSD, POSIX.1-2001."
5825 #: build/C/man2/getrlimit.2:480
5826 msgid "B<prlimit>(): Linux-specific."
5830 #: build/C/man2/getrlimit.2:496
5832 "B<RLIMIT_MEMLOCK> and B<RLIMIT_NPROC> derive from BSD and are not specified "
5833 "in POSIX.1-2001; they are present on the BSDs and Linux, but on few other "
5834 "implementations. B<RLIMIT_RSS> derives from BSD and is not specified in "
5835 "POSIX.1-2001; it is nevertheless present on most implementations. "
5836 "B<RLIMIT_MSGQUEUE>, B<RLIMIT_NICE>, B<RLIMIT_RTPRIO>, B<RLIMIT_RTTIME>, and "
5837 "B<RLIMIT_SIGPENDING> are Linux-specific."
5841 #: build/C/man2/getrlimit.2:502
5843 "A child process created via B<fork>(2) inherits its parent's resource "
5844 "limits. Resource limits are preserved across B<execve>(2)."
5848 #: build/C/man2/getrlimit.2:511
5850 "One can set the resource limits of the shell using the built-in I<ulimit> "
5851 "command (I<limit> in B<csh>(1)). The shell's resource limits are inherited "
5852 "by the processes that it creates to execute commands."
5856 #: build/C/man2/getrlimit.2:520
5858 "Ancient systems provided a B<vlimit>() function with a similar purpose to "
5859 "B<setrlimit>(). For backward compatibility, glibc also provides "
5860 "B<vlimit>(). All new applications should be written using B<setrlimit>()."
5864 #: build/C/man2/getrlimit.2:523
5865 msgid "The program below demonstrates the use of B<prlimit>()."
5869 #: build/C/man2/getrlimit.2:532
5872 "#define _GNU_SOURCE\n"
5873 "#define _FILE_OFFSET_BITS 64\n"
5874 "#include E<lt>stdio.hE<gt>\n"
5875 "#include E<lt>time.hE<gt>\n"
5876 "#include E<lt>stdlib.hE<gt>\n"
5877 "#include E<lt>unistd.hE<gt>\n"
5878 "#include E<lt>sys/resource.hE<gt>\n"
5882 #: build/C/man2/getrlimit.2:535
5885 "#define errExit(msg) \tdo { perror(msg); exit(EXIT_FAILURE); \\e\n"
5890 #: build/C/man2/getrlimit.2:542
5894 "main(int argc, char *argv[])\n"
5896 " struct rlimit old, new;\n"
5897 " struct rlimit *newp;\n"
5902 #: build/C/man2/getrlimit.2:548
5905 " if (!(argc == 2 || argc == 4)) {\n"
5906 " fprintf(stderr, \"Usage: %s E<lt>pidE<gt> [E<lt>new-soft-limitE<gt> "
5908 " \"E<lt>new-hard-limitE<gt>]\\en\", argv[0]);\n"
5909 " exit(EXIT_FAILURE);\n"
5914 #: build/C/man2/getrlimit.2:550
5916 msgid " pid = atoi(argv[1]); /* PID of target process */\n"
5920 #: build/C/man2/getrlimit.2:557
5924 " if (argc == 4) {\n"
5925 " new.rlim_cur = atoi(argv[2]);\n"
5926 " new.rlim_max = atoi(argv[3]);\n"
5932 #: build/C/man2/getrlimit.2:560
5935 " /* Set CPU time limit of target process; retrieve and display\n"
5936 " previous limit */\n"
5940 #: build/C/man2/getrlimit.2:565
5943 " if (prlimit(pid, RLIMIT_CPU, newp, &old) == -1)\n"
5944 " errExit(\"prlimit-1\");\n"
5945 " printf(\"Previous limits: soft=%lld; hard=%lld\\en\",\n"
5946 " (long long) old.rlim_cur, (long long) old.rlim_max);\n"
5950 #: build/C/man2/getrlimit.2:567
5952 msgid " /* Retrieve and display new CPU time limit */\n"
5956 #: build/C/man2/getrlimit.2:572
5959 " if (prlimit(pid, RLIMIT_CPU, NULL, &old) == -1)\n"
5960 " errExit(\"prlimit-2\");\n"
5961 " printf(\"New limits: soft=%lld; hard=%lld\\en\",\n"
5962 " (long long) old.rlim_cur, (long long) old.rlim_max);\n"
5966 #: build/C/man2/getrlimit.2:575
5969 " exit(EXIT_FAILURE);\n"
5973 #. FIXME prlimit() does not suffer
5974 #. https://bugzilla.kernel.org/show_bug.cgi?id=5042
5975 #. http://sources.redhat.com/bugzilla/show_bug.cgi?id=12201
5977 #: build/C/man2/getrlimit.2:588
5979 "In older Linux kernels, the B<SIGXCPU> and B<SIGKILL> signals delivered when "
5980 "a process encountered the soft and hard B<RLIMIT_CPU> limits were delivered "
5981 "one (CPU) second later than they should have been. This was fixed in kernel "
5985 #. see http://marc.theaimsgroup.com/?l=linux-kernel&m=114008066530167&w=2
5987 #: build/C/man2/getrlimit.2:596
5989 "In 2.6.x kernels before 2.6.17, a B<RLIMIT_CPU> limit of 0 is wrongly "
5990 "treated as \"no limit\" (like B<RLIM_INFINITY>). Since Linux 2.6.17, "
5991 "setting a limit of 0 does have an effect, but is actually treated as a limit "
5996 #: build/C/man2/getrlimit.2:600
5998 "A kernel bug means that B<RLIMIT_RTPRIO> does not work in kernel 2.6.12; the "
5999 "problem is fixed in kernel 2.6.13."
6002 #. see http://marc.theaimsgroup.com/?l=linux-kernel&m=112256338703880&w=2
6004 #: build/C/man2/getrlimit.2:611
6006 "In kernel 2.6.12, there was an off-by-one mismatch between the priority "
6007 "ranges returned by B<getpriority>(2) and B<RLIMIT_NICE>. This had the "
6008 "effect that the actual ceiling for the nice value was calculated as I<19\\ "
6009 "-\\ rlim_cur>. This was fixed in kernel 2.6.13."
6013 #: build/C/man2/getrlimit.2:620
6015 "Kernels before 2.4.22 did not diagnose the error B<EINVAL> for "
6016 "B<setrlimit>() when I<rlim-E<gt>rlim_cur> was greater than "
6017 "I<rlim-E<gt>rlim_max>."
6021 #: build/C/man2/getrlimit.2:637
6023 "B<dup>(2), B<fcntl>(2), B<fork>(2), B<getrusage>(2), B<mlock>(2), "
6024 "B<mmap>(2), B<open>(2), B<quotactl>(2), B<sbrk>(2), B<shmctl>(2), "
6025 "B<malloc>(3), B<sigqueue>(3), B<ulimit>(3), B<core>(5), B<capabilities>(7), "
6030 #: build/C/man2/getrusage.2:39
6036 #: build/C/man2/getrusage.2:39 build/C/man2/getsid.2:25 build/C/man2/setpgid.2:46
6042 #: build/C/man2/getrusage.2:42
6043 msgid "getrusage - get resource usage"
6047 #: build/C/man2/getrusage.2:48
6048 msgid "B<int getrusage(int >I<who>B<, struct rusage *>I<usage>B<);>"
6052 #: build/C/man2/getrusage.2:54
6054 "B<getrusage>() returns resource usage measures for I<who>, which can be one "
6059 #: build/C/man2/getrusage.2:54
6061 msgid "B<RUSAGE_SELF>"
6065 #: build/C/man2/getrusage.2:58
6067 "Return resource usage statistics for the calling process, which is the sum "
6068 "of resources used by all threads in the process."
6072 #: build/C/man2/getrusage.2:58
6074 msgid "B<RUSAGE_CHILDREN>"
6078 #: build/C/man2/getrusage.2:65
6080 "Return resource usage statistics for all children of the calling process "
6081 "that have terminated and been waited for. These statistics will include the "
6082 "resources used by grandchildren, and further removed descendants, if all of "
6083 "the intervening descendants waited on their terminated children."
6087 #: build/C/man2/getrusage.2:65
6089 msgid "B<RUSAGE_THREAD> (since Linux 2.6.26)"
6093 #: build/C/man2/getrusage.2:68
6094 msgid "Return resource usage statistics for the calling thread."
6098 #: build/C/man2/getrusage.2:72
6100 "The resource usages are returned in the structure pointed to by I<usage>, "
6101 "which has the following form:"
6105 #: build/C/man2/getrusage.2:93
6109 " struct timeval ru_utime; /* user CPU time used */\n"
6110 " struct timeval ru_stime; /* system CPU time used */\n"
6111 " long ru_maxrss; /* maximum resident set size */\n"
6112 " long ru_ixrss; /* integral shared memory size */\n"
6113 " long ru_idrss; /* integral unshared data size */\n"
6114 " long ru_isrss; /* integral unshared stack size */\n"
6115 " long ru_minflt; /* page reclaims (soft page faults) */\n"
6116 " long ru_majflt; /* page faults (hard page faults) */\n"
6117 " long ru_nswap; /* swaps */\n"
6118 " long ru_inblock; /* block input operations */\n"
6119 " long ru_oublock; /* block output operations */\n"
6120 " long ru_msgsnd; /* IPC messages sent */\n"
6121 " long ru_msgrcv; /* IPC messages received */\n"
6122 " long ru_nsignals; /* signals received */\n"
6123 " long ru_nvcsw; /* voluntary context switches */\n"
6124 " long ru_nivcsw; /* involuntary context switches */\n"
6129 #: build/C/man2/getrusage.2:101
6131 "Not all fields are completed; unmaintained fields are set to zero by the "
6132 "kernel. (The unmaintained fields are provided for compatibility with other "
6133 "systems, and because they may one day be supported on Linux.) The fields "
6134 "are interpreted as follows:"
6138 #: build/C/man2/getrusage.2:101
6144 #: build/C/man2/getrusage.2:107
6146 "This is the total amount of time spent executing in user mode, expressed in "
6147 "a I<timeval> structure (seconds plus microseconds)."
6151 #: build/C/man2/getrusage.2:107
6157 #: build/C/man2/getrusage.2:113
6159 "This is the total amount of time spent executing in kernel mode, expressed "
6160 "in a I<timeval> structure (seconds plus microseconds)."
6164 #: build/C/man2/getrusage.2:113
6166 msgid "I<ru_maxrss> (since Linux 2.6.32)"
6170 #: build/C/man2/getrusage.2:119
6172 "This is the maximum resident set size used (in kilobytes). For "
6173 "B<RUSAGE_CHILDREN>, this is the resident set size of the largest child, not "
6174 "the maximum resident set size of the process tree."
6178 #: build/C/man2/getrusage.2:119
6180 msgid "I<ru_ixrss> (unmaintained)"
6183 #. On some systems, this field records the number of signals received.
6185 #: build/C/man2/getrusage.2:125 build/C/man2/getrusage.2:130 build/C/man2/getrusage.2:135 build/C/man2/getrusage.2:147 build/C/man2/getrusage.2:159 build/C/man2/getrusage.2:165 build/C/man2/getrusage.2:169
6186 msgid "This field is currently unused on Linux."
6190 #: build/C/man2/getrusage.2:125
6192 msgid "I<ru_idrss> (unmaintained)"
6196 #: build/C/man2/getrusage.2:130
6198 msgid "I<ru_isrss> (unmaintained)"
6202 #: build/C/man2/getrusage.2:135
6204 msgid "I<ru_minflt>"
6208 #: build/C/man2/getrusage.2:140
6210 "The number of page faults serviced without any I/O activity; here I/O "
6211 "activity is avoided by ``reclaiming'' a page frame from the list of pages "
6212 "awaiting reallocation."
6216 #: build/C/man2/getrusage.2:140
6218 msgid "I<ru_majflt>"
6222 #: build/C/man2/getrusage.2:143
6223 msgid "The number of page faults serviced that required I/O activity."
6227 #: build/C/man2/getrusage.2:143
6229 msgid "I<ru_nswap> (unmaintained)"
6233 #: build/C/man2/getrusage.2:147
6235 msgid "I<ru_inblock> (since Linux 2.6.22)"
6239 #: build/C/man2/getrusage.2:150
6240 msgid "The number of times the file system had to perform input."
6244 #: build/C/man2/getrusage.2:150
6246 msgid "I<ru_oublock> (since Linux 2.6.22)"
6250 #: build/C/man2/getrusage.2:153
6251 msgid "The number of times the file system had to perform output."
6255 #: build/C/man2/getrusage.2:153
6257 msgid "I<ru_msgsnd> (unmaintained)"
6261 #: build/C/man2/getrusage.2:159
6263 msgid "I<ru_msgrcv> (unmaintained)"
6267 #: build/C/man2/getrusage.2:165
6269 msgid "I<ru_nsignals> (unmaintained)"
6273 #: build/C/man2/getrusage.2:169
6275 msgid "I<ru_nvcsw> (since Linux 2.6)"
6279 #: build/C/man2/getrusage.2:174
6281 "The number of times a context switch resulted due to a process voluntarily "
6282 "giving up the processor before its time slice was completed (usually to "
6283 "await availability of a resource)."
6287 #: build/C/man2/getrusage.2:174
6289 msgid "I<ru_nivcsw> (since Linux 2.6)"
6293 #: build/C/man2/getrusage.2:179
6295 "The number of times a context switch resulted due to a higher priority "
6296 "process becoming runnable or because the current process exceeded its time "
6301 #: build/C/man2/getrusage.2:190
6302 msgid "I<usage> points outside the accessible address space."
6306 #: build/C/man2/getrusage.2:194
6307 msgid "I<who> is invalid."
6311 #: build/C/man2/getrusage.2:202
6313 "SVr4, 4.3BSD. POSIX.1-2001 specifies B<getrusage>(), but only specifies the "
6314 "fields I<ru_utime> and I<ru_stime>."
6318 #: build/C/man2/getrusage.2:205
6319 msgid "B<RUSAGE_THREAD> is Linux-specific."
6323 #: build/C/man2/getrusage.2:208
6324 msgid "Resource usage metrics are preserved across an B<execve>(2)."
6328 #: build/C/man2/getrusage.2:216
6330 "Including I<E<lt>sys/time.hE<gt>> is not required these days, but increases "
6331 "portability. (Indeed, I<struct timeval> is defined in "
6332 "I<E<lt>sys/time.hE<gt>>.)"
6335 #. See the description of getrusage() in XSH.
6336 #. A similar statement was also in SUSv2.
6338 #: build/C/man2/getrusage.2:228
6340 "In Linux kernel versions before 2.6.9, if the disposition of B<SIGCHLD> is "
6341 "set to B<SIG_IGN> then the resource usages of child processes are "
6342 "automatically included in the value returned by B<RUSAGE_CHILDREN>, although "
6343 "POSIX.1-2001 explicitly prohibits this. This nonconformance is rectified in "
6344 "Linux 2.6.9 and later."
6348 #: build/C/man2/getrusage.2:231
6350 "The structure definition shown at the start of this page was taken from "
6355 #: build/C/man2/getrusage.2:240
6357 "Ancient systems provided a B<vtimes>() function with a similar purpose to "
6358 "B<getrusage>(). For backward compatibility, glibc also provides "
6359 "B<vtimes>(). All new applications should be written using B<getrusage>()."
6363 #: build/C/man2/getrusage.2:245
6364 msgid "See also the description of I</proc/PID/stat> in B<proc>(5)."
6368 #: build/C/man2/getrusage.2:252
6370 "B<clock_gettime>(2), B<getrlimit>(2), B<times>(2), B<wait>(2), B<wait4>(2), "
6375 #: build/C/man2/getsid.2:25
6381 #: build/C/man2/getsid.2:28
6382 msgid "getsid - get session ID"
6386 #: build/C/man2/getsid.2:32
6387 msgid "B<pid_t getsid(pid_t>I< pid>B<);>"
6391 #: build/C/man2/getsid.2:41
6392 msgid "B<getsid>():"
6396 #: build/C/man2/getsid.2:44 build/C/man2/setpgid.2:77
6397 msgid "_XOPEN_SOURCE\\ E<gt>=\\ 500 || _XOPEN_SOURCE\\ &&\\ _XOPEN_SOURCE_EXTENDED"
6401 #: build/C/man2/getsid.2:46 build/C/man2/setpgid.2:79
6402 msgid "|| /* Since glibc 2.12: */ _POSIX_C_SOURCE\\ E<gt>=\\ 200809L"
6406 #: build/C/man2/getsid.2:57
6408 "I<getsid(0)> returns the session ID of the calling process. I<getsid(p)> "
6409 "returns the session ID of the process with process ID I<p>. (The session ID "
6410 "of a process is the process group ID of the session leader.)"
6414 #: build/C/man2/getsid.2:62
6416 "On success, a session ID is returned. On error, I<(pid_t)\\ -1> will be "
6417 "returned, and I<errno> is set appropriately."
6421 #: build/C/man2/getsid.2:69
6423 "A process with process ID I<p> exists, but it is not in the same session as "
6424 "the calling process, and the implementation considers this an error."
6428 #: build/C/man2/getsid.2:74
6429 msgid "No process with process ID I<p> was found."
6432 #. Linux has this system call since Linux 1.3.44.
6433 #. There is libc support since libc 5.2.19.
6435 #: build/C/man2/getsid.2:78
6436 msgid "This system call is available on Linux since version 2.0."
6440 #: build/C/man2/getsid.2:80 build/C/man2/setgid.2:76 build/C/man2/setsid.2:66
6441 msgid "SVr4, POSIX.1-2001."
6445 #: build/C/man2/getsid.2:83
6446 msgid "Linux does not return B<EPERM>."
6450 #: build/C/man2/getsid.2:87
6451 msgid "B<getpgid>(2), B<setsid>(2), B<credentials>(7)"
6455 #: build/C/man2/getuid.2:26
6461 #: build/C/man2/getuid.2:29
6462 msgid "getuid, geteuid - get user identity"
6466 #: build/C/man2/getuid.2:35
6467 msgid "B<uid_t getuid(void);>"
6471 #: build/C/man2/getuid.2:37
6472 msgid "B<uid_t geteuid(void);>"
6476 #: build/C/man2/getuid.2:40
6477 msgid "B<getuid>() returns the real user ID of the calling process."
6481 #: build/C/man2/getuid.2:43
6482 msgid "B<geteuid>() returns the effective user ID of the calling process."
6486 #: build/C/man2/getuid.2:48
6492 #: build/C/man2/getuid.2:57
6494 "In UNIX V6 the B<getuid>() call returned I<(euid E<lt>E<lt> 8) + uid>. "
6495 "UNIX V7 introduced separate calls B<getuid>() and B<geteuid>()."
6499 #: build/C/man2/getuid.2:73
6501 "The original Linux B<getuid>() and B<geteuid>() system calls supported "
6502 "only 16-bit user IDs. Subsequently, Linux 2.4 added B<getuid32>() and "
6503 "B<geteuid32>(), supporting 32-bit IDs. The glibc B<getuid>() and "
6504 "B<geteuid>() wrapper functions transparently deal with the variations "
6505 "across kernel versions."
6509 #: build/C/man2/getuid.2:78
6510 msgid "B<getresuid>(2), B<setreuid>(2), B<setuid>(2), B<credentials>(7)"
6514 #: build/C/man2/iopl.2:33
6520 #: build/C/man2/iopl.2:33
6526 #: build/C/man2/iopl.2:36
6527 msgid "iopl - change I/O privilege level"
6531 #: build/C/man2/iopl.2:38
6532 msgid "B<#include E<lt>sys/io.hE<gt>>"
6536 #: build/C/man2/iopl.2:40
6537 msgid "B<int iopl(int >I<level>B<);>"
6541 #: build/C/man2/iopl.2:44
6543 "B<iopl>() changes the I/O privilege level of the calling process, as "
6544 "specified in I<level>."
6548 #: build/C/man2/iopl.2:50
6550 "This call is necessary to allow 8514-compatible X servers to run under "
6551 "Linux. Since these X servers require access to all 65536 I/O ports, the "
6552 "B<ioperm>(2) call is not sufficient."
6556 #: build/C/man2/iopl.2:54
6558 "In addition to granting unrestricted I/O port access, running at a higher "
6559 "I/O privilege level also allows the process to disable interrupts. This "
6560 "will probably crash the system, and is not recommended."
6564 #: build/C/man2/iopl.2:59
6565 msgid "Permissions are inherited by B<fork>(2) and B<execve>(2)."
6569 #: build/C/man2/iopl.2:61
6570 msgid "The I/O privilege level for a normal process is 0."
6574 #: build/C/man2/iopl.2:65
6576 "This call is mostly for the i386 architecture. On many other architectures "
6577 "it does not exist or will always return an error."
6581 #: build/C/man2/iopl.2:75
6582 msgid "I<level> is greater than 3."
6586 #: build/C/man2/iopl.2:78
6587 msgid "This call is unimplemented."
6591 #: build/C/man2/iopl.2:85
6593 "The calling process has insufficient privilege to call B<iopl>(); the "
6594 "B<CAP_SYS_RAWIO> capability is required."
6598 #: build/C/man2/iopl.2:89
6600 "B<iopl>() is Linux-specific and should not be used in processes intended to "
6605 #: build/C/man2/iopl.2:98
6607 "Libc5 treats it as a system call and has a prototype in "
6608 "I<E<lt>unistd.hE<gt>>. Glibc1 does not have a prototype. Glibc2 has a "
6609 "prototype both in I<E<lt>sys/io.hE<gt>> and in I<E<lt>sys/perm.hE<gt>>. "
6610 "Avoid the latter, it is available on i386 only."
6614 #: build/C/man2/iopl.2:101
6615 msgid "B<ioperm>(2), B<capabilities>(7)"
6619 #: build/C/man2/ioprio_set.2:25
6625 #: build/C/man2/ioprio_set.2:25
6631 #: build/C/man2/ioprio_set.2:28
6632 msgid "ioprio_get, ioprio_set - get/set I/O scheduling class and priority"
6636 #: build/C/man2/ioprio_set.2:32
6639 "B<int ioprio_get(int >I<which>B<, int >I<who>B<);>\n"
6640 "B<int ioprio_set(int >I<which>B<, int >I<who>B<, int >I<ioprio>B<);>\n"
6644 #: build/C/man2/ioprio_set.2:40
6646 "The B<ioprio_get>() and B<ioprio_set>() system calls respectively get and "
6647 "set the I/O scheduling class and priority of one or more processes."
6651 #: build/C/man2/ioprio_set.2:52
6653 "The I<which> and I<who> arguments identify the process(es) on which the "
6654 "system calls operate. The I<which> argument determines how I<who> is "
6655 "interpreted, and has one of the following values:"
6659 #: build/C/man2/ioprio_set.2:52
6661 msgid "B<IOPRIO_WHO_PROCESS>"
6665 #: build/C/man2/ioprio_set.2:56
6666 msgid "I<who> is a process ID identifying a single process."
6670 #: build/C/man2/ioprio_set.2:56
6672 msgid "B<IOPRIO_WHO_PGRP>"
6676 #: build/C/man2/ioprio_set.2:60
6677 msgid "I<who> is a process group ID identifying all the members of a process group."
6681 #: build/C/man2/ioprio_set.2:60
6683 msgid "B<IOPRIO_WHO_USER>"
6687 #: build/C/man2/ioprio_set.2:65
6689 "I<who> is a user ID identifying all of the processes that have a matching "
6694 #: build/C/man2/ioprio_set.2:88
6696 "If I<which> is specified as B<IOPRIO_WHO_PGRP> or B<IOPRIO_WHO_USER> when "
6697 "calling B<ioprio_get>(), and more than one process matches I<who>, then the "
6698 "returned priority will be the highest one found among all of the matching "
6699 "processes. One priority is said to be higher than another one if it belongs "
6700 "to a higher priority class (B<IOPRIO_CLASS_RT> is the highest priority "
6701 "class; B<IOPRIO_CLASS_IDLE> is the lowest) or if it belongs to the same "
6702 "priority class as the other process but has a higher priority level (a lower "
6703 "priority number means a higher priority level)."
6707 #: build/C/man2/ioprio_set.2:98
6709 "The I<ioprio> argument given to B<ioprio_set>() is a bit mask that "
6710 "specifies both the scheduling class and the priority to be assigned to the "
6711 "target process(es). The following macros are used for assembling and "
6712 "dissecting I<ioprio> values:"
6716 #: build/C/man2/ioprio_set.2:98
6718 msgid "B<IOPRIO_PRIO_VALUE(>I<class>B<, >I<data>B<)>"
6722 #: build/C/man2/ioprio_set.2:107
6724 "Given a scheduling I<class> and priority (I<data>), this macro combines the "
6725 "two values to produce an I<ioprio> value, which is returned as the result of "
6730 #: build/C/man2/ioprio_set.2:107
6732 msgid "B<IOPRIO_PRIO_CLASS(>I<mask>B<)>"
6736 #: build/C/man2/ioprio_set.2:119
6738 "Given I<mask> (an I<ioprio> value), this macro returns its I/O class "
6739 "component, that is, one of the values B<IOPRIO_CLASS_RT>, "
6740 "B<IOPRIO_CLASS_BE>, or B<IOPRIO_CLASS_IDLE>."
6744 #: build/C/man2/ioprio_set.2:119
6746 msgid "B<IOPRIO_PRIO_DATA(>I<mask>B<)>"
6750 #: build/C/man2/ioprio_set.2:128
6752 "Given I<mask> (an I<ioprio> value), this macro returns its priority "
6753 "(I<data>) component."
6757 #: build/C/man2/ioprio_set.2:131
6759 "See the NOTES section for more information on scheduling classes and "
6764 #: build/C/man2/ioprio_set.2:139
6766 "I/O priorities are supported for reads and for synchronous (B<O_DIRECT>, "
6767 "B<O_SYNC>) writes. I/O priorities are not supported for asynchronous "
6768 "writes because they are issued outside the context of the program dirtying "
6769 "the memory, and thus program-specific priorities do not apply."
6773 #: build/C/man2/ioprio_set.2:152
6775 "On success, B<ioprio_get>() returns the I<ioprio> value of the process with "
6776 "highest I/O priority of any of the processes that match the criteria "
6777 "specified in I<which> and I<who>. On error, -1 is returned, and I<errno> is "
6778 "set to indicate the error."
6782 #: build/C/man2/ioprio_set.2:159
6784 "On success, B<ioprio_set>() returns 0. On error, -1 is returned, and "
6785 "I<errno> is set to indicate the error."
6789 #: build/C/man2/ioprio_set.2:169
6791 "Invalid value for I<which> or I<ioprio>. Refer to the NOTES section for "
6792 "available scheduler classes and priority levels for I<ioprio>."
6796 #: build/C/man2/ioprio_set.2:177
6798 "The calling process does not have the privilege needed to assign this "
6799 "I<ioprio> to the specified process(es). See the NOTES section for more "
6800 "information on required privileges for B<ioprio_set>()."
6804 #: build/C/man2/ioprio_set.2:183
6806 "No process(es) could be found that matched the specification in I<which> and "
6811 #: build/C/man2/ioprio_set.2:186
6812 msgid "These system calls have been available on Linux since kernel 2.6.13."
6816 #: build/C/man2/ioprio_set.2:191
6818 "Glibc does not provide wrapper for these system calls; call them using "
6823 #: build/C/man2/ioprio_set.2:196
6825 "These system calls only have an effect when used in conjunction with an I/O "
6826 "scheduler that supports I/O priorities. As at kernel 2.6.17 the only such "
6827 "scheduler is the Completely Fair Queuing (CFQ) I/O scheduler."
6831 #: build/C/man2/ioprio_set.2:196
6833 msgid "Selecting an I/O Scheduler"
6837 #: build/C/man2/ioprio_set.2:200
6839 "I/O Schedulers are selected on a per-device basis via the special file "
6840 "I</sys/block/E<lt>deviceE<gt>/queue/scheduler>."
6844 #: build/C/man2/ioprio_set.2:206
6846 "One can view the current I/O scheduler via the I</sys> file system. For "
6847 "example, the following command displays a list of all schedulers currently "
6848 "loaded in the kernel:"
6852 #: build/C/man2/ioprio_set.2:211
6855 "$B< cat /sys/block/hda/queue/scheduler>\n"
6856 "noop anticipatory deadline [cfq]\n"
6860 #: build/C/man2/ioprio_set.2:225
6862 "The scheduler surrounded by brackets is the one actually in use for the "
6863 "device (I<hda> in the example). Setting another scheduler is done by "
6864 "writing the name of the new scheduler to this file. For example, the "
6865 "following command will set the scheduler for the I<hda> device to I<cfq>:"
6869 #: build/C/man2/ioprio_set.2:231
6874 "#B< echo cfq E<gt> /sys/block/hda/queue/scheduler>\n"
6878 #: build/C/man2/ioprio_set.2:233
6880 msgid "The Completely Fair Queuing (CFQ) I/O Scheduler"
6884 #: build/C/man2/ioprio_set.2:239
6886 "Since v3 (aka CFQ Time Sliced) CFQ implements I/O nice levels similar to "
6887 "those of CPU scheduling. These nice levels are grouped in three scheduling "
6888 "classes each one containing one or more priority levels:"
6892 #: build/C/man2/ioprio_set.2:239
6894 msgid "B<IOPRIO_CLASS_RT> (1)"
6898 #: build/C/man2/ioprio_set.2:254
6900 "This is the real-time I/O class. This scheduling class is given higher "
6901 "priority than any other class: processes from this class are given first "
6902 "access to the disk every time. Thus this I/O class needs to be used with "
6903 "some care: one I/O real-time process can starve the entire system. Within "
6904 "the real-time class, there are 8 levels of class data (priority) that "
6905 "determine exactly how much time this process needs the disk for on each "
6906 "service. The highest real-time priority level is 0; the lowest is 7. In "
6907 "the future this might change to be more directly mappable to performance, by "
6908 "passing in a desired data rate instead."
6912 #: build/C/man2/ioprio_set.2:254
6914 msgid "B<IOPRIO_CLASS_BE> (2)"
6918 #: build/C/man2/ioprio_set.2:267
6920 "This is the best-effort scheduling class, which is the default for any "
6921 "process that hasn't set a specific I/O priority. The class data (priority) "
6922 "determines how much I/O bandwidth the process will get. Best-effort "
6923 "priority levels are analogous to CPU nice values (see B<getpriority>(2)). "
6924 "The priority level determines a priority relative to other processes in the "
6925 "best-effort scheduling class. Priority levels range from 0 (highest) to 7 "
6930 #: build/C/man2/ioprio_set.2:267
6932 msgid "B<IOPRIO_CLASS_IDLE> (3)"
6936 #: build/C/man2/ioprio_set.2:276
6938 "This is the idle scheduling class. Processes running at this level only get "
6939 "I/O time when no-one else needs the disk. The idle class has no class "
6940 "data. Attention is required when assigning this priority class to a "
6941 "process, since it may become starved if higher priority processes are "
6942 "constantly accessing the disk."
6946 #: build/C/man2/ioprio_set.2:280
6948 "Refer to I<Documentation/block/ioprio.txt> for more information on the CFQ "
6949 "I/O Scheduler and an example program."
6953 #: build/C/man2/ioprio_set.2:280
6955 msgid "Required permissions to set I/O priorities"
6959 #: build/C/man2/ioprio_set.2:283
6961 "Permission to change a process's priority is granted or denied based on two "
6966 #: build/C/man2/ioprio_set.2:283
6968 msgid "B<Process ownership>"
6972 #: build/C/man2/ioprio_set.2:291
6974 "An unprivileged process may only set the I/O priority of a process whose "
6975 "real UID matches the real or effective UID of the calling process. A "
6976 "process which has the B<CAP_SYS_NICE> capability can change the priority of "
6981 #: build/C/man2/ioprio_set.2:291
6983 msgid "B<What is the desired priority>"
6987 #: build/C/man2/ioprio_set.2:303
6989 "Attempts to set very high priorities (B<IOPRIO_CLASS_RT>) require the "
6990 "B<CAP_SYS_ADMIN> capability. Kernel versions up to 2.6.24 also required "
6991 "B<CAP_SYS_ADMIN> to set a very low priority (B<IOPRIO_CLASS_IDLE>), but "
6992 "since Linux 2.6.25, this is no longer required."
6996 #: build/C/man2/ioprio_set.2:308
6998 "A call to B<ioprio_set>() must follow both rules, or the call will fail "
6999 "with the error B<EPERM>."
7002 #. 6 May 07: Bug report raised:
7003 #. http://sources.redhat.com/bugzilla/show_bug.cgi?id=4464
7004 #. Ulrich Drepper replied that he wasn't going to add these
7007 #: build/C/man2/ioprio_set.2:317
7009 "Glibc does not yet provide a suitable header file defining the function "
7010 "prototypes and macros described on this page. Suitable definitions can be "
7011 "found in I<linux/ioprio.h>."
7015 #: build/C/man2/ioprio_set.2:321
7016 msgid "B<getpriority>(2), B<open>(2), B<capabilities>(7)"
7020 #: build/C/man2/ioprio_set.2:323
7021 msgid "Documentation/block/ioprio.txt in the kernel source tree."
7025 #: build/C/man2/ipc.2:26
7031 #: build/C/man2/ipc.2:26
7037 #: build/C/man2/ipc.2:29
7038 msgid "ipc - System V IPC system calls"
7042 #: build/C/man2/ipc.2:34
7045 "B<int ipc(unsigned int >I<call>B<, int >I<first>B<, int >I<second>B<, int "
7047 "B< void *>I<ptr>B<, long >I<fifth>B<);>\n"
7051 #: build/C/man2/ipc.2:42
7053 "B<ipc>() is a common kernel entry point for the System V IPC calls for "
7054 "messages, semaphores, and shared memory. I<call> determines which IPC "
7055 "function to invoke; the other arguments are passed through to the "
7060 #: build/C/man2/ipc.2:46
7062 "User programs should call the appropriate functions by their usual names. "
7063 "Only standard library implementors and kernel hackers need to know about "
7068 #: build/C/man2/ipc.2:50
7070 "B<ipc>() is Linux-specific, and should not be used in programs intended to "
7075 #: build/C/man2/ipc.2:58
7077 "On a few architectures, for example ia64, there is no B<ipc>() system call; "
7078 "instead B<msgctl>(2), B<semctl>(2), B<shmctl>(2), and so on really are "
7079 "implemented as separate system calls."
7083 #: build/C/man2/ipc.2:71
7085 "B<msgctl>(2), B<msgget>(2), B<msgrcv>(2), B<msgsnd>(2), B<semctl>(2), "
7086 "B<semget>(2), B<semop>(2), B<semtimedop>(2), B<shmat>(2), B<shmctl>(2), "
7087 "B<shmdt>(2), B<shmget>(2)"
7091 #: build/C/man2/seteuid.2:27
7097 #: build/C/man2/seteuid.2:27
7103 #: build/C/man2/seteuid.2:30
7104 msgid "seteuid, setegid - set effective user or group ID"
7108 #: build/C/man2/seteuid.2:36
7109 msgid "B<int seteuid(uid_t >I<euid>B<);>"
7113 #: build/C/man2/seteuid.2:38
7114 msgid "B<int setegid(gid_t >I<egid>B<);>"
7118 #: build/C/man2/seteuid.2:47
7119 msgid "B<seteuid>(), B<setegid>():"
7123 #: build/C/man2/seteuid.2:49
7125 "_BSD_SOURCE || _POSIX_C_SOURCE\\ E<gt>=\\ 200112L || _XOPEN_SOURCE\\ "
7130 #: build/C/man2/seteuid.2:56
7132 "B<seteuid>() sets the effective user ID of the calling process. "
7133 "Unprivileged user processes may only set the effective user ID to the real "
7134 "user ID, the effective user ID or the saved set-user-ID."
7139 #. equals \-1, nothing is changed.
7140 #. (This is an artifact of the implementation in glibc of seteuid()
7141 #. using setresuid(2).)
7143 #: build/C/man2/seteuid.2:65
7145 "Precisely the same holds for B<setegid>() with \"group\" instead of "
7150 #: build/C/man2/seteuid.2:89
7152 "The calling process is not privileged (Linux: does not have the "
7153 "B<CAP_SETUID> capability in the case of B<seteuid>(), or the B<CAP_SETGID> "
7154 "capability in the case of B<setegid>()) and I<euid> (respectively, I<egid>) "
7155 "is not the real user (group) ID, the effective user (group) ID, or the saved "
7156 "set-user-ID (saved set-group-ID)."
7160 #: build/C/man2/seteuid.2:91
7161 msgid "4.3BSD, POSIX.1-2001."
7165 #: build/C/man2/seteuid.2:97
7167 "Setting the effective user (group) ID to the saved set-user-ID (saved "
7168 "set-group-ID) is possible since Linux 1.1.37 (1.1.38). On an arbitrary "
7169 "system one should check B<_POSIX_SAVED_IDS>."
7173 #: build/C/man2/seteuid.2:108
7175 "Under libc4, libc5 and glibc 2.0 B<seteuid(>I<euid>B<)> is equivalent to "
7176 "B<setreuid(-1,>I< euid>B<)> and hence may change the saved set-user-ID. "
7177 "Under glibc 2.1 and later it is equivalent to B<setresuid(-1,>I< euid>B<, "
7178 "-1)> and hence does not change the saved set-user-ID. Similar remarks hold "
7183 #: build/C/man2/seteuid.2:117
7185 "According to POSIX.1, B<seteuid>() (B<setegid>()) need not permit I<euid> "
7186 "(I<egid>) to be the same value as the current effective user (group) ID, "
7187 "and some implementations do not permit this."
7191 #: build/C/man2/seteuid.2:124
7193 "B<geteuid>(2), B<setresuid>(2), B<setreuid>(2), B<setuid>(2), "
7194 "B<capabilities>(7), B<credentials>(7)"
7198 #: build/C/man2/setfsgid.2:29
7204 #: build/C/man2/setfsgid.2:32
7205 msgid "setfsgid - set group identity used for file system checks"
7209 #: build/C/man2/setfsgid.2:35 build/C/man2/setfsuid.2:35
7210 msgid "B<#include E<lt>unistd.hE<gt>> /* glibc uses E<lt>sys/fsuid.hE<gt> */"
7214 #: build/C/man2/setfsgid.2:37
7215 msgid "B<int setfsgid(uid_t >I<fsgid>B<);>"
7219 #: build/C/man2/setfsgid.2:49
7221 "The system call B<setfsgid>() sets the group ID that the Linux kernel uses "
7222 "to check for all accesses to the file system. Normally, the value of "
7223 "I<fsgid> will shadow the value of the effective group ID. In fact, whenever "
7224 "the effective group ID is changed, I<fsgid> will also be changed to the new "
7225 "value of the effective group ID."
7229 #: build/C/man2/setfsgid.2:60
7231 "Explicit calls to B<setfsuid>(2) and B<setfsgid>() are usually only used "
7232 "by programs such as the Linux NFS server that need to change what user and "
7233 "group ID is used for file access without a corresponding change in the real "
7234 "and effective user and group IDs. A change in the normal user IDs for a "
7235 "program such as the NFS server is a security hole that can expose it to "
7236 "unwanted signals. (But see below.)"
7240 #: build/C/man2/setfsgid.2:67
7242 "B<setfsgid>() will only succeed if the caller is the superuser or if "
7243 "I<fsgid> matches either the real group ID, effective group ID, saved "
7244 "set-group-ID, or the current value of I<fsgid>."
7248 #: build/C/man2/setfsgid.2:74
7250 "On success, the previous value of I<fsgid> is returned. On error, the "
7251 "current value of I<fsgid> is returned."
7254 #. This system call is present since Linux 1.1.44
7255 #. and in libc since libc 4.7.6.
7257 #: build/C/man2/setfsgid.2:78 build/C/man2/setfsuid.2:78
7258 msgid "This system call is present in Linux since version 1.2."
7262 #: build/C/man2/setfsgid.2:82
7264 "B<setfsgid>() is Linux-specific and should not be used in programs intended "
7269 #: build/C/man2/setfsgid.2:88
7271 "When glibc determines that the argument is not a valid group ID, it will "
7272 "return -1 and set I<errno> to B<EINVAL> without attempting the system call."
7276 #: build/C/man2/setfsgid.2:92 build/C/man2/setfsuid.2:92
7278 "Note that at the time this system call was introduced, a process could send "
7279 "a signal to a process with the same effective user ID. Today signal "
7280 "permission handling is slightly different."
7284 #: build/C/man2/setfsgid.2:102
7286 "The original Linux B<setfsgid>() system call supported only 16-bit group "
7287 "IDs. Subsequently, Linux 2.4 added B<setfsgid32>() supporting 32-bit IDs. "
7288 "The glibc B<setfsgid>() wrapper function transparently deals with the "
7289 "variation across kernel versions."
7293 #: build/C/man2/setfsgid.2:110
7295 "No error messages of any kind are returned to the caller. At the very "
7296 "least, B<EPERM> should be returned when the call fails (because the caller "
7297 "lacks the B<CAP_SETGID> capability)."
7301 #: build/C/man2/setfsgid.2:115
7302 msgid "B<kill>(2), B<setfsuid>(2), B<capabilities>(7), B<credentials>(7)"
7306 #: build/C/man2/setfsuid.2:29
7312 #: build/C/man2/setfsuid.2:32
7313 msgid "setfsuid - set user identity used for file system checks"
7317 #: build/C/man2/setfsuid.2:37
7318 msgid "B<int setfsuid(uid_t >I<fsuid>B<);>"
7322 #: build/C/man2/setfsuid.2:49
7324 "The system call B<setfsuid>() sets the user ID that the Linux kernel uses "
7325 "to check for all accesses to the file system. Normally, the value of "
7326 "I<fsuid> will shadow the value of the effective user ID. In fact, whenever "
7327 "the effective user ID is changed, I<fsuid> will also be changed to the new "
7328 "value of the effective user ID."
7332 #: build/C/man2/setfsuid.2:60
7334 "Explicit calls to B<setfsuid>() and B<setfsgid>(2) are usually only used "
7335 "by programs such as the Linux NFS server that need to change what user and "
7336 "group ID is used for file access without a corresponding change in the real "
7337 "and effective user and group IDs. A change in the normal user IDs for a "
7338 "program such as the NFS server is a security hole that can expose it to "
7339 "unwanted signals. (But see below.)"
7343 #: build/C/man2/setfsuid.2:67
7345 "B<setfsuid>() will only succeed if the caller is the superuser or if "
7346 "I<fsuid> matches either the real user ID, effective user ID, saved "
7347 "set-user-ID, or the current value of I<fsuid>."
7351 #: build/C/man2/setfsuid.2:74
7353 "On success, the previous value of I<fsuid> is returned. On error, the "
7354 "current value of I<fsuid> is returned."
7358 #: build/C/man2/setfsuid.2:82
7360 "B<setfsuid>() is Linux-specific and should not be used in programs intended "
7365 #: build/C/man2/setfsuid.2:88
7367 "When glibc determines that the argument is not a valid user ID, it will "
7368 "return -1 and set I<errno> to B<EINVAL> without attempting the system call."
7372 #: build/C/man2/setfsuid.2:102
7374 "The original Linux B<setfsuid>() system call supported only 16-bit user "
7375 "IDs. Subsequently, Linux 2.4 added B<setfsuid32>() supporting 32-bit IDs. "
7376 "The glibc B<setfsuid>() wrapper function transparently deals with the "
7377 "variation across kernel versions."
7381 #: build/C/man2/setfsuid.2:110
7383 "No error messages of any kind are returned to the caller. At the very "
7384 "least, B<EPERM> should be returned when the call fails (because the caller "
7385 "lacks the B<CAP_SETUID> capability)."
7389 #: build/C/man2/setfsuid.2:115
7390 msgid "B<kill>(2), B<setfsgid>(2), B<capabilities>(7), B<credentials>(7)"
7394 #: build/C/man2/setgid.2:27
7400 #: build/C/man2/setgid.2:30
7401 msgid "setgid - set group identity"
7405 #: build/C/man2/setgid.2:36
7406 msgid "B<int setgid(gid_t >I<gid>B<);>"
7410 #: build/C/man2/setgid.2:41
7412 "B<setgid>() sets the effective group ID of the calling process. If the "
7413 "caller is the superuser, the real GID and saved set-group-ID are also set."
7417 #: build/C/man2/setgid.2:51
7419 "Under Linux, B<setgid>() is implemented like the POSIX version with the "
7420 "B<_POSIX_SAVED_IDS> feature. This allows a set-group-ID program that is not "
7421 "set-user-ID-root to drop all of its group privileges, do some un-privileged "
7422 "work, and then reengage the original effective group ID in a secure manner."
7426 #: build/C/man2/setgid.2:64
7428 "The calling process is not privileged (does not have the B<CAP_SETGID> "
7429 "capability), and I<gid> does not match the real group ID or saved "
7430 "set-group-ID of the calling process."
7434 #: build/C/man2/setgid.2:74
7436 "The original Linux B<setgid>() system call supported only 16-bit group "
7437 "IDs. Subsequently, Linux 2.4 added B<setgid32>() supporting 32-bit IDs. "
7438 "The glibc B<setgid>() wrapper function transparently deals with the "
7439 "variation across kernel versions."
7443 #: build/C/man2/setgid.2:82
7445 "B<getgid>(2), B<setegid>(2), B<setregid>(2), B<capabilities>(7), "
7450 #: build/C/man2/setpgid.2:46
7456 #: build/C/man2/setpgid.2:49
7457 msgid "setpgid, getpgid, setpgrp, getpgrp - set/get process group"
7461 #: build/C/man2/setpgid.2:53
7462 msgid "B<int setpgid(pid_t >I<pid>B<, pid_t >I<pgid>B<);>"
7466 #: build/C/man2/setpgid.2:55
7467 msgid "B<pid_t getpgid(pid_t >I<pid>B<);>"
7471 #: build/C/man2/setpgid.2:57
7472 msgid "B<pid_t getpgrp(void);> /* POSIX.1 version */"
7476 #: build/C/man2/setpgid.2:60
7478 "B<pid_t getpgrp(pid_t >I<pid>B<);\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ > /* BSD "
7483 #: build/C/man2/setpgid.2:62
7484 msgid "B<int setpgrp(void);> /* System V version */"
7488 #: build/C/man2/setpgid.2:65
7489 msgid "B<int setpgrp(pid_t >I<pid>B<, pid_t >I<pgid>B<);\\ > /* BSD version */"
7493 #: build/C/man2/setpgid.2:74
7494 msgid "B<getpgid>():"
7498 #: build/C/man2/setpgid.2:82
7499 msgid "B<setpgrp>() (POSIX.1):"
7503 #: build/C/man2/setpgid.2:85
7506 " _SVID_SOURCE || _XOPEN_SOURCE\\ E<gt>=\\ 500 ||\n"
7507 " _XOPEN_SOURCE\\ &&\\ _XOPEN_SOURCE_EXTENDED\n"
7511 #: build/C/man2/setpgid.2:89
7512 msgid "B<setpgrp>()\\ (BSD), B<getpgrp>()\\ (BSD):"
7516 #: build/C/man2/setpgid.2:93
7520 " !\\ (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE ||\n"
7521 " _XOPEN_SOURCE_EXTENDED || _GNU_SOURCE || _SVID_SOURCE)\n"
7525 #: build/C/man2/setpgid.2:105
7527 "All of these interfaces are available on Linux, and are used for getting and "
7528 "setting the process group ID (PGID) of a process. The preferred, "
7529 "POSIX.1-specified ways of doing this are: B<getpgrp>(void), for retrieving "
7530 "the calling process's PGID; and B<setpgid>(), for setting a process's PGID."
7534 #: build/C/man2/setpgid.2:130
7536 "B<setpgid>() sets the PGID of the process specified by I<pid> to I<pgid>. "
7537 "If I<pid> is zero, then the process ID of the calling process is used. If "
7538 "I<pgid> is zero, then the PGID of the process specified by I<pid> is made "
7539 "the same as its process ID. If B<setpgid>() is used to move a process from "
7540 "one process group to another (as is done by some shells when creating "
7541 "pipelines), both process groups must be part of the same session (see "
7542 "B<setsid>(2) and B<credentials>(7)). In this case, the I<pgid> specifies "
7543 "an existing process group to be joined and the session ID of that group must "
7544 "match the session ID of the joining process."
7548 #: build/C/man2/setpgid.2:135
7550 "The POSIX.1 version of B<getpgrp>(), which takes no arguments, returns the "
7551 "PGID of the calling process."
7555 #: build/C/man2/setpgid.2:146
7557 "B<getpgid>() returns the PGID of the process specified by I<pid>. If "
7558 "I<pid> is zero, the process ID of the calling process is used. (Retrieving "
7559 "the PGID of a process other than the caller is rarely necessary, and the "
7560 "POSIX.1 B<getpgrp>() is preferred for that task.)"
7564 #: build/C/man2/setpgid.2:151
7566 "The System V-style B<setpgrp>(), which takes no arguments, is equivalent to "
7567 "I<setpgid(0,\\ 0)>."
7570 #. The true BSD setpgrp() system call differs in allowing the PGID
7571 #. to be set to arbitrary values, rather than being restricted to
7572 #. PGIDs in the same session.
7574 #: build/C/man2/setpgid.2:163
7576 "The BSD-specific B<setpgrp>() call, which takes arguments I<pid> and "
7577 "I<pgid>, is equivalent to I<setpgid(pid, pgid)>."
7581 #: build/C/man2/setpgid.2:170
7583 "The BSD-specific B<getpgrp>() call, which takes a single I<pid> argument, "
7584 "is equivalent to I<getpgid(pid)>."
7588 #: build/C/man2/setpgid.2:179
7590 "On success, B<setpgid>() and B<setpgrp>() return zero. On error, -1 is "
7591 "returned, and I<errno> is set appropriately."
7595 #: build/C/man2/setpgid.2:183
7596 msgid "The POSIX.1 B<getpgrp>() always returns the PGID of the caller."
7600 #: build/C/man2/setpgid.2:191
7602 "B<getpgid>(), and the BSD-specific B<getpgrp>() return a process group on "
7603 "success. On error, -1 is returned, and I<errno> is set appropriately."
7607 #: build/C/man2/setpgid.2:200
7609 "An attempt was made to change the process group ID of one of the children of "
7610 "the calling process and the child had already performed an B<execve>(2) "
7611 "(B<setpgid>(), B<setpgrp>())."
7615 #: build/C/man2/setpgid.2:206
7616 msgid "I<pgid> is less than 0 (B<setpgid>(), B<setpgrp>())."
7620 #: build/C/man2/setpgid.2:215
7622 "An attempt was made to move a process into a process group in a different "
7623 "session, or to change the process group ID of one of the children of the "
7624 "calling process and the child was in a different session, or to change the "
7625 "process group ID of a session leader (B<setpgid>(), B<setpgrp>())."
7629 #: build/C/man2/setpgid.2:225
7631 "For B<getpgid>(): I<pid> does not match any process. For B<setpgid>(): "
7632 "I<pid> is not the calling process and not a child of the calling process."
7636 #: build/C/man2/setpgid.2:231
7638 "B<setpgid>() and the version of B<getpgrp>() with no arguments conform to "
7643 #: build/C/man2/setpgid.2:240
7645 "POSIX.1-2001 also specifies B<getpgid>() and the version of B<setpgrp>() "
7646 "that takes no arguments. (POSIX.1-2008 marks this B<setpgrp>() "
7647 "specification as obsolete.)"
7651 #: build/C/man2/setpgid.2:247
7653 "The version of B<getpgrp>() with one argument and the version of "
7654 "B<setpgrp>() that takes two arguments derive from 4.2BSD, and are not "
7655 "specified by POSIX.1."
7659 #: build/C/man2/setpgid.2:253
7661 "A child created via B<fork>(2) inherits its parent's process group ID. The "
7662 "PGID is preserved across an B<execve>(2)."
7666 #: build/C/man2/setpgid.2:256
7668 "Each process group is a member of a session and each process is a member of "
7669 "the session of which its process group is a member."
7673 #: build/C/man2/setpgid.2:283
7675 "A session can have a controlling terminal. At any time, one (and only one) "
7676 "of the process groups in the session can be the foreground process group for "
7677 "the terminal; the remaining process groups are in the background. If a "
7678 "signal is generated from the terminal (e.g., typing the interrupt key to "
7679 "generate B<SIGINT>), that signal is sent to the foreground process group. "
7680 "(See B<termios>(3) for a description of the characters that generate "
7681 "signals.) Only the foreground process group may B<read>(2) from the "
7682 "terminal; if a background process group tries to B<read>(2) from the "
7683 "terminal, then the group is sent a B<SIGTSTP> signal, which suspends it. "
7684 "The B<tcgetpgrp>(3) and B<tcsetpgrp>(3) functions are used to get/set the "
7685 "foreground process group of the controlling terminal."
7689 #: build/C/man2/setpgid.2:291
7691 "The B<setpgid>() and B<getpgrp>() calls are used by programs such as "
7692 "B<bash>(1) to create process groups in order to implement shell job "
7697 #: build/C/man2/setpgid.2:301
7699 "If a session has a controlling terminal, and the B<CLOCAL> flag for that "
7700 "terminal is not set, and a terminal hangup occurs, then the session leader "
7701 "is sent a B<SIGHUP>. If the session leader exits, then a B<SIGHUP> signal "
7702 "will also be sent to each process in the foreground process group of the "
7703 "controlling terminal."
7706 #. exit.3 refers to the following text:
7708 #: build/C/man2/setpgid.2:315
7710 "If the exit of the process causes a process group to become orphaned, and if "
7711 "any member of the newly orphaned process group is stopped, then a B<SIGHUP> "
7712 "signal followed by a B<SIGCONT> signal will be sent to each process in the "
7713 "newly orphaned process group. An orphaned process group is one in which the "
7714 "parent of every member of process group is either itself also a member of "
7715 "the process group or is a member of a process group in a different session "
7716 "(see also B<credentials>(7))."
7720 #: build/C/man2/setpgid.2:322
7722 "B<getuid>(2), B<setsid>(2), B<tcgetpgrp>(3), B<tcsetpgrp>(3), B<termios>(3), "
7727 #: build/C/man2/setresuid.2:26
7733 #: build/C/man2/setresuid.2:29
7734 msgid "setresuid, setresgid - set real, effective and saved user or group ID"
7738 #: build/C/man2/setresuid.2:35
7739 msgid "B<int setresuid(uid_t >I<ruid>B<, uid_t >I<euid>B<, uid_t >I<suid>B<);>"
7743 #: build/C/man2/setresuid.2:37
7744 msgid "B<int setresgid(gid_t >I<rgid>B<, gid_t >I<egid>B<, gid_t >I<sgid>B<);>"
7748 #: build/C/man2/setresuid.2:41
7750 "B<setresuid>() sets the real user ID, the effective user ID, and the saved "
7751 "set-user-ID of the calling process."
7755 #: build/C/man2/setresuid.2:47
7757 "Unprivileged user processes may change the real UID, effective UID, and "
7758 "saved set-user-ID, each to one of: the current real UID, the current "
7759 "effective UID or the current saved set-user-ID."
7763 #: build/C/man2/setresuid.2:51
7765 "Privileged processes (on Linux, those having the B<CAP_SETUID> capability) "
7766 "may set the real UID, effective UID, and saved set-user-ID to arbitrary "
7771 #: build/C/man2/setresuid.2:53
7772 msgid "If one of the arguments equals -1, the corresponding value is not changed."
7776 #: build/C/man2/setresuid.2:57
7778 "Regardless of what changes are made to the real UID, effective UID, and "
7779 "saved set-user-ID, the file system UID is always set to the same value as "
7780 "the (possibly new) effective UID."
7784 #: build/C/man2/setresuid.2:64
7786 "Completely analogously, B<setresgid>() sets the real GID, effective GID, "
7787 "and saved set-group-ID of the calling process (and always modifies the file "
7788 "system GID to be the same as the effective GID), with the same restrictions "
7789 "for unprivileged processes."
7793 #: build/C/man2/setresuid.2:70 build/C/man2/setuid.2:74
7799 #: build/C/man2/setresuid.2:77
7801 "I<uid> does not match the current UID and this call would bring that user ID "
7802 "over its B<RLIMIT_NPROC> resource limit."
7806 #: build/C/man2/setresuid.2:81
7808 "The calling process is not privileged (did not have the B<CAP_SETUID> "
7809 "capability) and tried to change the IDs to values that are not permitted."
7813 #: build/C/man2/setresuid.2:83
7814 msgid "These calls are available under Linux since Linux 2.1.44."
7818 #: build/C/man2/setresuid.2:90
7820 "Under HP-UX and FreeBSD, the prototype is found in I<E<lt>unistd.hE<gt>>. "
7821 "Under Linux the prototype is provided by glibc since version 2.3.2."
7825 #: build/C/man2/setresuid.2:106
7827 "The original Linux B<setresuid>() and B<setresgid>() system calls "
7828 "supported only 16-bit user and group IDs. Subsequently, Linux 2.4 added "
7829 "B<setresuid32>() and B<setresgid32>(), supporting 32-bit IDs. The glibc "
7830 "B<setresuid>() and B<setresgid>() wrapper functions transparently deal "
7831 "with the variations across kernel versions."
7835 #: build/C/man2/setresuid.2:115
7837 "B<getresuid>(2), B<getuid>(2), B<setfsgid>(2), B<setfsuid>(2), "
7838 "B<setreuid>(2), B<setuid>(2), B<capabilities>(7), B<credentials>(7)"
7842 #: build/C/man2/setreuid.2:43
7848 #: build/C/man2/setreuid.2:46
7849 msgid "setreuid, setregid - set real and/or effective user or group ID"
7853 #: build/C/man2/setreuid.2:52
7854 msgid "B<int setreuid(uid_t >I<ruid>B<, uid_t >I<euid>B<);>"
7858 #: build/C/man2/setreuid.2:54
7859 msgid "B<int setregid(gid_t >I<rgid>B<, gid_t >I<egid>B<);>"
7863 #: build/C/man2/setreuid.2:62
7864 msgid "B<setreuid>(), B<setregid>():"
7868 #: build/C/man2/setreuid.2:66
7870 "_BSD_SOURCE || _XOPEN_SOURCE\\ E<gt>=\\ 500 || _XOPEN_SOURCE\\ &&\\ "
7871 "_XOPEN_SOURCE_EXTENDED"
7875 #: build/C/man2/setreuid.2:71
7876 msgid "B<setreuid>() sets real and effective user IDs of the calling process."
7880 #: build/C/man2/setreuid.2:74
7882 "Supplying a value of -1 for either the real or effective user ID forces the "
7883 "system to leave that ID unchanged."
7887 #: build/C/man2/setreuid.2:77
7889 "Unprivileged processes may only set the effective user ID to the real user "
7890 "ID, the effective user ID, or the saved set-user-ID."
7894 #: build/C/man2/setreuid.2:80
7896 "Unprivileged users may only set the real user ID to the real user ID or the "
7897 "effective user ID."
7901 #: build/C/man2/setreuid.2:84
7903 "If the real user ID is set or the effective user ID is set to a value not "
7904 "equal to the previous real user ID, the saved set-user-ID will be set to the "
7905 "new effective user ID."
7909 #: build/C/man2/setreuid.2:89
7911 "Completely analogously, B<setregid>() sets real and effective group ID's of "
7912 "the calling process, and all of the above holds with \"group\" instead of "
7917 #: build/C/man2/setreuid.2:111
7919 "The calling process is not privileged (Linux: does not have the "
7920 "B<CAP_SETUID> capability in the case of B<setreuid>(), or the B<CAP_SETGID> "
7921 "capability in the case of B<setregid>()) and a change other than (i) "
7922 "swapping the effective user (group) ID with the real user (group) ID, or "
7923 "(ii) setting one to the value of the other or (iii) setting the effective "
7924 "user (group) ID to the value of the saved set-user-ID (saved set-group-ID) "
7929 #: build/C/man2/setreuid.2:117
7931 "POSIX.1-2001, 4.3BSD (the B<setreuid>() and B<setregid>() function calls "
7932 "first appeared in 4.2BSD)."
7936 #: build/C/man2/setreuid.2:121
7938 "Setting the effective user (group) ID to the saved set-user-ID (saved "
7939 "set-group-ID) is possible since Linux 1.1.37 (1.1.38)."
7943 #: build/C/man2/setreuid.2:138
7945 "POSIX.1 does not specify all of possible ID changes that are permitted on "
7946 "Linux for an unprivileged process. For B<setreuid>(), the effective user ID "
7947 "can be made the same as the real user ID or the save set-user-ID, and it is "
7948 "unspecified whether unprivileged processes may set the real user ID to the "
7949 "real user ID, the effective user ID, or the saved set-user-ID. For "
7950 "B<setregid>(), the real group ID can be changed to the value of the saved "
7951 "set-group-ID, and the effective group ID can be changed to the value of the "
7952 "real group ID or the saved set-group-ID. The precise details of what ID "
7953 "changes are permitted vary across implementations."
7957 #: build/C/man2/setreuid.2:141
7959 "POSIX.1 makes no specification about the effect of these calls on the saved "
7960 "set-user-ID and saved set-group-ID."
7964 #: build/C/man2/setreuid.2:157
7966 "The original Linux B<setreuid>() and B<setregid>() system calls supported "
7967 "only 16-bit user and group IDs. Subsequently, Linux 2.4 added "
7968 "B<setreuid32>() and B<setregid32>(), supporting 32-bit IDs. The glibc "
7969 "B<setreuid>() and B<setregid>() wrapper functions transparently deal with "
7970 "the variations across kernel versions."
7974 #: build/C/man2/setreuid.2:165
7976 "B<getgid>(2), B<getuid>(2), B<seteuid>(2), B<setgid>(2), B<setresuid>(2), "
7977 "B<setuid>(2), B<capabilities>(7)"
7981 #: build/C/man2/setsid.2:29
7987 #: build/C/man2/setsid.2:29
7993 #: build/C/man2/setsid.2:32
7994 msgid "setsid - creates a session and sets the process group ID"
7998 #: build/C/man2/setsid.2:37
7999 msgid "B<pid_t setsid(void);>"
8003 #: build/C/man2/setsid.2:50
8005 "B<setsid>() creates a new session if the calling process is not a process "
8006 "group leader. The calling process is the leader of the new session, the "
8007 "process group leader of the new process group, and has no controlling tty. "
8008 "The process group ID and session ID of the calling process are set to the "
8009 "PID of the calling process. The calling process will be the only process in "
8010 "this new process group and in this new session."
8014 #: build/C/man2/setsid.2:57
8016 "On success, the (new) session ID of the calling process is returned. On "
8017 "error, I<(pid_t)\\ -1> is returned, and I<errno> is set to indicate the "
8022 #: build/C/man2/setsid.2:64
8024 "The process group ID of any process equals the PID of the calling process. "
8025 "Thus, in particular, B<setsid>() fails if the calling process is already a "
8026 "process group leader."
8030 #: build/C/man2/setsid.2:72
8032 "A child created via B<fork>(2) inherits its parent's session ID. The "
8033 "session ID is preserved across an B<execve>(2)."
8037 #: build/C/man2/setsid.2:83
8039 "A process group leader is a process with process group ID equal to its PID. "
8040 "In order to be sure that B<setsid>() will succeed, B<fork>(2) and "
8041 "B<_exit>(2), and have the child do B<setsid>()."
8045 #: build/C/man2/setsid.2:89
8047 "B<getsid>(2), B<setpgid>(2), B<setpgrp>(2), B<tcgetsid>(3), "
8052 #: build/C/man2/setuid.2:28
8058 #: build/C/man2/setuid.2:31
8059 msgid "setuid - set user identity"
8063 #: build/C/man2/setuid.2:37
8064 msgid "B<int setuid(uid_t >I<uid>B<);>"
8068 #: build/C/man2/setuid.2:42
8070 "B<setuid>() sets the effective user ID of the calling process. If the "
8071 "effective UID of the caller is root, the real UID and saved set-user-ID are "
8076 #: build/C/man2/setuid.2:51
8078 "Under Linux, B<setuid>() is implemented like the POSIX version with the "
8079 "B<_POSIX_SAVED_IDS> feature. This allows a set-user-ID (other than root) "
8080 "program to drop all of its user privileges, do some un-privileged work, and "
8081 "then reengage the original effective user ID in a secure manner."
8085 #: build/C/man2/setuid.2:61
8087 "If the user is root or the program is set-user-ID-root, special care must be "
8088 "taken. The B<setuid>() function checks the effective user ID of the caller "
8089 "and if it is the superuser, all process-related user ID's are set to "
8090 "I<uid>. After this has occurred, it is impossible for the program to regain "
8095 #: build/C/man2/setuid.2:68
8097 "Thus, a set-user-ID-root program wishing to temporarily drop root "
8098 "privileges, assume the identity of an unprivileged user, and then regain "
8099 "root privileges afterward cannot use B<setuid>(). You can accomplish this "
8100 "with B<seteuid>(2)."
8104 #: build/C/man2/setuid.2:83
8106 "The I<uid> does not match the current uid and I<uid> brings process over its "
8107 "B<RLIMIT_NPROC> resource limit."
8111 #: build/C/man2/setuid.2:90
8113 "The user is not privileged (Linux: does not have the B<CAP_SETUID> "
8114 "capability) and I<uid> does not match the real UID or saved set-user-ID of "
8115 "the calling process."
8118 #. SVr4 documents an additional EINVAL error condition.
8120 #: build/C/man2/setuid.2:95
8122 "SVr4, POSIX.1-2001. Not quite compatible with the 4.4BSD call, which sets "
8123 "all of the real, saved, and effective user IDs."
8127 #: build/C/man2/setuid.2:103
8129 "Linux has the concept of the file system user ID, normally equal to the "
8130 "effective user ID. The B<setuid>() call also sets the file system user ID "
8131 "of the calling process. See B<setfsuid>(2)."
8135 #: build/C/man2/setuid.2:108
8137 "If I<uid> is different from the old effective UID, the process will be "
8138 "forbidden from leaving core dumps."
8142 #: build/C/man2/setuid.2:118
8144 "The original Linux B<setuid>() system call supported only 16-bit user IDs. "
8145 "Subsequently, Linux 2.4 added B<setuid32>() supporting 32-bit IDs. The "
8146 "glibc B<setuid>() wrapper function transparently deals with the variation "
8147 "across kernel versions."
8151 #: build/C/man2/setuid.2:125
8153 "B<getuid>(2), B<seteuid>(2), B<setfsuid>(2), B<setreuid>(2), "
8154 "B<capabilities>(7), B<credentials>(7)"
8158 #: build/C/man7/svipc.7:25
8164 #: build/C/man7/svipc.7:25
8170 #: build/C/man7/svipc.7:28
8171 msgid "svipc - System V interprocess communication mechanisms"
8175 #: build/C/man7/svipc.7:35
8178 "B<#include E<lt>sys/types.hE<gt>>\n"
8179 "B<#include E<lt>sys/ipc.hE<gt>>\n"
8180 "B<#include E<lt>sys/msg.hE<gt>>\n"
8181 "B<#include E<lt>sys/sem.hE<gt>>\n"
8182 "B<#include E<lt>sys/shm.hE<gt>>\n"
8186 #: build/C/man7/svipc.7:43
8188 "This manual page refers to the Linux implementation of the System V "
8189 "interprocess communication (IPC) mechanisms: message queues, semaphore sets, "
8190 "and shared memory segments. In the following, the word I<resource> means an "
8191 "instantiation of one among such mechanisms."
8195 #: build/C/man7/svipc.7:43
8197 msgid "Resource Access Permissions"
8201 #: build/C/man7/svipc.7:53
8203 "For each resource, the system uses a common structure of type I<struct "
8204 "ipc_perm> to store information needed in determining permissions to perform "
8205 "an IPC operation. The I<ipc_perm> structure, defined by the "
8206 "I<E<lt>sys/ipc.hE<gt>> system header file, includes the following members:"
8210 #: build/C/man7/svipc.7:63
8213 "struct ipc_perm {\n"
8214 " uid_t cuid; /* creator user ID */\n"
8215 " gid_t cgid; /* creator group ID */\n"
8216 " uid_t uid; /* owner user ID */\n"
8217 " gid_t gid; /* owner group ID */\n"
8218 " unsigned short mode; /* r/w permissions */\n"
8223 #: build/C/man7/svipc.7:73
8225 "The I<mode> member of the I<ipc_perm> structure defines, with its lower 9 "
8226 "bits, the access permissions to the resource for a process executing an IPC "
8227 "system call. The permissions are interpreted as follows:"
8231 #: build/C/man7/svipc.7:77
8234 " 0400 Read by user.\n"
8235 " 0200 Write by user.\n"
8239 #: build/C/man7/svipc.7:80
8242 " 0040 Read by group.\n"
8243 " 0020 Write by group.\n"
8247 #: build/C/man7/svipc.7:83
8250 " 0004 Read by others.\n"
8251 " 0002 Write by others.\n"
8255 #: build/C/man7/svipc.7:91
8257 "Bits 0100, 0010, and 0001 (the execute bits) are unused by the system. "
8258 "Furthermore, \"write\" effectively means \"alter\" for a semaphore set."
8262 #: build/C/man7/svipc.7:94
8263 msgid "The same system header file also defines the following symbolic constants:"
8267 #: build/C/man7/svipc.7:94
8269 msgid "B<IPC_CREAT>"
8273 #: build/C/man7/svipc.7:97
8274 msgid "Create entry if key doesn't exist."
8278 #: build/C/man7/svipc.7:97
8284 #: build/C/man7/svipc.7:100
8285 msgid "Fail if key exists."
8289 #: build/C/man7/svipc.7:100
8291 msgid "B<IPC_NOWAIT>"
8295 #: build/C/man7/svipc.7:103
8296 msgid "Error if request must wait."
8300 #: build/C/man7/svipc.7:103
8302 msgid "B<IPC_PRIVATE>"
8306 #: build/C/man7/svipc.7:106
8307 msgid "Private key."
8311 #: build/C/man7/svipc.7:106
8317 #: build/C/man7/svipc.7:109
8318 msgid "Remove resource."
8322 #: build/C/man7/svipc.7:109
8328 #: build/C/man7/svipc.7:112
8329 msgid "Set resource options."
8333 #: build/C/man7/svipc.7:112
8339 #: build/C/man7/svipc.7:115
8340 msgid "Get resource options."
8344 #: build/C/man7/svipc.7:124
8346 "Note that B<IPC_PRIVATE> is a I<key_t> type, while all the other symbolic "
8347 "constants are flag fields and can be OR'ed into an I<int> type variable."
8351 #: build/C/man7/svipc.7:124
8353 msgid "Message Queues"
8357 #: build/C/man7/svipc.7:132
8359 "A message queue is uniquely identified by a positive integer (its I<msqid>) "
8360 "and has an associated data structure of type I<struct msqid_ds>, defined in "
8361 "I<E<lt>sys/msg.hE<gt>>, containing the following members:"
8365 #: build/C/man7/svipc.7:145
8368 "struct msqid_ds {\n"
8369 " struct ipc_perm msg_perm;\n"
8370 " msgqnum_t msg_qnum; /* no of messages on queue */\n"
8371 " msglen_t msg_qbytes; /* bytes max on a queue */\n"
8372 " pid_t msg_lspid; /* PID of last msgsnd(2) call */\n"
8373 " pid_t msg_lrpid; /* PID of last msgrcv(2) call */\n"
8374 " time_t msg_stime; /* last msgsnd(2) time */\n"
8375 " time_t msg_rtime; /* last msgrcv(2) time */\n"
8376 " time_t msg_ctime; /* last change time */\n"
8381 #: build/C/man7/svipc.7:147
8387 #: build/C/man7/svipc.7:152
8389 "I<ipc_perm> structure that specifies the access permissions on the message "
8394 #: build/C/man7/svipc.7:152
8400 #: build/C/man7/svipc.7:155
8401 msgid "Number of messages currently on the message queue."
8405 #: build/C/man7/svipc.7:155
8407 msgid "I<msg_qbytes>"
8411 #: build/C/man7/svipc.7:159
8412 msgid "Maximum number of bytes of message text allowed on the message queue."
8416 #: build/C/man7/svipc.7:159
8418 msgid "I<msg_lspid>"
8422 #: build/C/man7/svipc.7:164
8423 msgid "ID of the process that performed the last B<msgsnd>(2) system call."
8427 #: build/C/man7/svipc.7:164
8429 msgid "I<msg_lrpid>"
8433 #: build/C/man7/svipc.7:169
8434 msgid "ID of the process that performed the last B<msgrcv>(2) system call."
8438 #: build/C/man7/svipc.7:169
8440 msgid "I<msg_stime>"
8444 #: build/C/man7/svipc.7:174
8445 msgid "Time of the last B<msgsnd>(2) system call."
8449 #: build/C/man7/svipc.7:174
8451 msgid "I<msg_rtime>"
8455 #: build/C/man7/svipc.7:179
8456 msgid "Time of the last B<msgrcv>(2) system call."
8460 #: build/C/man7/svipc.7:179
8462 msgid "I<msg_ctime>"
8466 #: build/C/man7/svipc.7:185
8468 "Time of the last system call that changed a member of the I<msqid_ds> "
8473 #: build/C/man7/svipc.7:185
8475 msgid "Semaphore Sets"
8479 #: build/C/man7/svipc.7:193
8481 "A semaphore set is uniquely identified by a positive integer (its I<semid>) "
8482 "and has an associated data structure of type I<struct semid_ds>, defined in "
8483 "I<E<lt>sys/sem.hE<gt>>, containing the following members:"
8487 #: build/C/man7/svipc.7:202
8490 "struct semid_ds {\n"
8491 " struct ipc_perm sem_perm;\n"
8492 " time_t sem_otime; /* last operation time */\n"
8493 " time_t sem_ctime; /* last change time */\n"
8494 " unsigned long sem_nsems; /* count of sems in set */\n"
8499 #: build/C/man7/svipc.7:204
8505 #: build/C/man7/svipc.7:209
8507 "I<ipc_perm> structure that specifies the access permissions on the semaphore "
8512 #: build/C/man7/svipc.7:209
8514 msgid "I<sem_otime>"
8518 #: build/C/man7/svipc.7:214
8519 msgid "Time of last B<semop>(2) system call."
8523 #: build/C/man7/svipc.7:214
8525 msgid "I<sem_ctime>"
8529 #: build/C/man7/svipc.7:220
8531 "Time of last B<semctl>(2) system call that changed a member of the above "
8532 "structure or of one semaphore belonging to the set."
8536 #: build/C/man7/svipc.7:220
8538 msgid "I<sem_nsems>"
8542 #: build/C/man7/svipc.7:228
8544 "Number of semaphores in the set. Each semaphore of the set is referenced by "
8545 "a nonnegative integer ranging from B<0> to I<sem_nsems-1>."
8549 #: build/C/man7/svipc.7:232
8551 "A semaphore is a data structure of type I<struct sem> containing the "
8552 "following members:"
8555 #. unsigned short semncnt; /* nr awaiting semval to increase */
8556 #. unsigned short semzcnt; /* nr awaiting semval = 0 */
8558 #: build/C/man7/svipc.7:241
8562 " int semval; /* semaphore value */\n"
8563 " int sempid; /* PID for last operation */\n"
8568 #: build/C/man7/svipc.7:243
8574 #: build/C/man7/svipc.7:246
8575 msgid "Semaphore value: a nonnegative integer."
8579 #: build/C/man7/svipc.7:246
8586 #. Number of processes suspended awaiting for
8591 #. Number of processes suspended awaiting for
8595 #: build/C/man7/svipc.7:260
8597 "ID of the last process that performed a semaphore operation on this "
8602 #: build/C/man7/svipc.7:260
8604 msgid "Shared Memory Segments"
8608 #: build/C/man7/svipc.7:268
8610 "A shared memory segment is uniquely identified by a positive integer (its "
8611 "I<shmid>) and has an associated data structure of type I<struct shmid_ds>, "
8612 "defined in I<E<lt>sys/shm.hE<gt>>, containing the following members:"
8616 #: build/C/man7/svipc.7:281
8619 "struct shmid_ds {\n"
8620 " struct ipc_perm shm_perm;\n"
8621 " size_t shm_segsz; /* size of segment */\n"
8622 " pid_t shm_cpid; /* PID of creator */\n"
8623 " pid_t shm_lpid; /* PID, last operation */\n"
8624 " shmatt_t shm_nattch; /* no. of current attaches */\n"
8625 " time_t shm_atime; /* time of last attach */\n"
8626 " time_t shm_dtime; /* time of last detach */\n"
8627 " time_t shm_ctime; /* time of last change */\n"
8632 #: build/C/man7/svipc.7:283
8638 #: build/C/man7/svipc.7:288
8640 "I<ipc_perm> structure that specifies the access permissions on the shared "
8645 #: build/C/man7/svipc.7:288
8647 msgid "I<shm_segsz>"
8651 #: build/C/man7/svipc.7:291
8652 msgid "Size in bytes of the shared memory segment."
8656 #: build/C/man7/svipc.7:291
8662 #: build/C/man7/svipc.7:294
8663 msgid "ID of the process that created the shared memory segment."
8667 #: build/C/man7/svipc.7:294
8673 #: build/C/man7/svipc.7:301
8675 "ID of the last process that executed a B<shmat>(2) or B<shmdt>(2) system "
8680 #: build/C/man7/svipc.7:301
8682 msgid "I<shm_nattch>"
8686 #: build/C/man7/svipc.7:304
8687 msgid "Number of current alive attaches for this shared memory segment."
8691 #: build/C/man7/svipc.7:304
8693 msgid "I<shm_atime>"
8697 #: build/C/man7/svipc.7:309
8698 msgid "Time of the last B<shmat>(2) system call."
8702 #: build/C/man7/svipc.7:309
8704 msgid "I<shm_dtime>"
8708 #: build/C/man7/svipc.7:314
8709 msgid "Time of the last B<shmdt>(2) system call."
8713 #: build/C/man7/svipc.7:314
8715 msgid "I<shm_ctime>"
8719 #: build/C/man7/svipc.7:320
8720 msgid "Time of the last B<shmctl>(2) system call that changed I<shmid_ds>."
8724 #: build/C/man7/svipc.7:334
8726 "B<ipc>(2), B<msgctl>(2), B<msgget>(2), B<msgrcv>(2), B<msgsnd>(2), "
8727 "B<semctl>(2), B<semget>(2), B<semop>(2), B<shmat>(2), B<shmctl>(2), "
8728 "B<shmdt>(2), B<shmget>(2), B<ftok>(3)"
8732 #: build/C/man3/ulimit.3:27
8738 #: build/C/man3/ulimit.3:27
8744 #: build/C/man3/ulimit.3:30
8745 msgid "ulimit - get and set user limits"
8749 #: build/C/man3/ulimit.3:32
8750 msgid "B<#include E<lt>ulimit.hE<gt>>"
8754 #: build/C/man3/ulimit.3:34
8755 msgid "B<long ulimit(int >I<cmd>B<, long >I<newlimit>B<);>"
8759 #: build/C/man3/ulimit.3:46
8761 "Warning: This routine is obsolete. Use B<getrlimit>(2), B<setrlimit>(2), "
8762 "and B<sysconf>(3) instead. For the shell command B<ulimit>(), see "
8767 #: build/C/man3/ulimit.3:53
8769 "The B<ulimit>() call will get or set some limit for the calling process. "
8770 "The I<cmd> argument can have one of the following values."
8774 #: build/C/man3/ulimit.3:53
8776 msgid "B<UL_GETFSIZE>"
8780 #: build/C/man3/ulimit.3:56
8781 msgid "Return the limit on the size of a file, in units of 512 bytes."
8785 #: build/C/man3/ulimit.3:56
8787 msgid "B<UL_SETFSIZE>"
8791 #: build/C/man3/ulimit.3:59
8792 msgid "Set the limit on the size of a file."
8796 #: build/C/man3/ulimit.3:59
8802 #: build/C/man3/ulimit.3:63
8804 "(Not implemented for Linux.) Return the maximum possible address of the "
8809 #: build/C/man3/ulimit.3:63
8815 #: build/C/man3/ulimit.3:67
8817 "(Implemented but no symbolic constant provided.) Return the maximum number "
8818 "of files that the calling process can open."
8822 #: build/C/man3/ulimit.3:74
8824 "On success, B<ulimit>() returns a nonnegative value. On error, -1 is "
8825 "returned, and I<errno> is set appropriately."
8829 #: build/C/man3/ulimit.3:78
8830 msgid "A unprivileged process tried to increase a limit."
8834 #: build/C/man3/ulimit.3:83
8835 msgid "SVr4, POSIX.1-2001. POSIX.1-2008 marks B<ulimit>() as obsolete."
8839 #: build/C/man3/ulimit.3:88
8840 msgid "B<bash>(1), B<getrlimit>(2), B<setrlimit>(2), B<sysconf>(3)"