]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man5/proc.5
proc.5: Document /proc/Meminfo LazyFree field
[thirdparty/man-pages.git] / man5 / proc.5
CommitLineData
fea681da 1.\" Copyright (C) 1994, 1995 by Daniel Quinlan (quinlan@yggdrasil.com)
f352b560 2.\" and Copyright (C) 2002-2008,2017 Michael Kerrisk <mtk.manpages@gmail.com>
fea681da
MK
3.\" with networking additions from Alan Cox (A.Cox@swansea.ac.uk)
4.\" and scsi additions from Michael Neuffer (neuffer@mail.uni-mainz.de)
5.\" and sysctl additions from Andries Brouwer (aeb@cwi.nl)
6.\" and System V IPC (as well as various other) additions from
c11b1abf 7.\" Michael Kerrisk <mtk.manpages@gmail.com>
fea681da 8.\"
1dd72f9c 9.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
fea681da
MK
10.\" This is free documentation; you can redistribute it and/or
11.\" modify it under the terms of the GNU General Public License as
12.\" published by the Free Software Foundation; either version 2 of
13.\" the License, or (at your option) any later version.
14.\"
15.\" The GNU General Public License's references to "object code"
16.\" and "executables" are to be interpreted as the output of any
17.\" document formatting or typesetting system, including
18.\" intermediate and printed output.
19.\"
20.\" This manual is distributed in the hope that it will be useful,
21.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
22.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23.\" GNU General Public License for more details.
24.\"
25.\" You should have received a copy of the GNU General Public
c715f741
MK
26.\" License along with this manual; if not, see
27.\" <http://www.gnu.org/licenses/>.
6a8d8745 28.\" %%%LICENSE_END
fea681da
MK
29.\"
30.\" Modified 1995-05-17 by faith@cs.unc.edu
31.\" Minor changes by aeb and Marty Leisner (leisner@sdsp.mc.xerox.com).
32.\" Modified 1996-04-13, 1996-07-22 by aeb@cwi.nl
33.\" Modified 2001-12-16 by rwhron@earthlink.net
34.\" Modified 2002-07-13 by jbelton@shaw.ca
35.\" Modified 2002-07-22, 2003-05-27, 2004-04-06, 2004-05-25
c11b1abf 36.\" by Michael Kerrisk <mtk.manpages@gmail.com>
5d6d14a0
MK
37.\" 2004-11-17, mtk -- updated notes on /proc/loadavg
38.\" 2004-12-01, mtk, rtsig-max and rtsig-nr went away in 2.6.8
568105c6
MK
39.\" 2004-12-14, mtk, updated 'statm', and fixed error in order of list
40.\" 2005-05-12, mtk, updated 'stat'
6d64ca9c 41.\" 2005-07-13, mtk, added /proc/sys/fs/mqueue/*
363f747c
MK
42.\" 2005-09-16, mtk, Added /proc/sys/fs/suid_dumpable
43.\" 2005-09-19, mtk, added /proc/zoneinfo
b4e9ee8f 44.\" 2005-03-01, mtk, moved /proc/sys/fs/mqueue/* material to mq_overview.7.
69119dc7
MK
45.\" 2008-06-05, mtk, Added /proc/[pid]/oom_score, /proc/[pid]/oom_adj,
46.\" /proc/[pid]/limits, /proc/[pid]/mountinfo, /proc/[pid]/mountstats,
47.\" and /proc/[pid]/fdinfo/*.
48.\" 2008-06-19, mtk, Documented /proc/[pid]/status.
cc2d5c36 49.\" 2008-07-15, mtk, added /proc/config.gz
363f747c 50.\"
43d42cc0 51.\" FIXME cross check against Documentation/filesystems/proc.txt
c13182ef 52.\" to see what information could be imported from that file
c533af9d 53.\" into this file.
fea681da 54.\"
4b8c67d9 55.TH PROC 5 2017-09-15 "Linux" "Linux Programmer's Manual"
fea681da 56.SH NAME
9ee4a2b6 57proc \- process information pseudo-filesystem
fea681da
MK
58.SH DESCRIPTION
59The
31fa1fd2 60.B proc
ac8727b6 61filesystem is a pseudo-filesystem which provides an interface to
c13182ef
MK
62kernel data structures.
63It is commonly mounted at
fea681da 64.IR /proc .
b574c52d
MK
65Typically, it is mounted automatically by the system,
66but it can also be mounted manually using a command such as:
67.PP
68.in +4n
69.EX
70mount \-t proc proc /proc
71.EE
72.in
73.PP
7e174651 74Most of the files in the
31fa1fd2 75.B proc
7e174651 76filesystem are read-only,
64165e01 77but some files are writable, allowing kernel variables to be changed.
7e174651 78.\"
fee59977
MK
79.SS Mount options
80The
31fa1fd2 81.B proc
fee59977
MK
82filesystem supports the following mount options:
83.TP
84.BR hidepid "=\fIn\fP (since Linux 3.3)"
85.\" commit 0499680a42141d86417a8fbaa8c8db806bea1201
86This option controls who can access the information in
87.IR /proc/[pid]
88directories.
89The argument,
90.IR n ,
91is one of the following values:
92.RS
93.TP 4
940
95Everybody may access all
96.IR /proc/[pid]
97directories.
98This is the traditional behavior,
99and the default if this mount option is not specified.
100.TP
1011
102Users may not access files and subdirectories inside any
103.IR /proc/[pid]
104directories but their own (the
105.IR /proc/[pid]
106directories themselves remain visible).
107Sensitive files such as
97949440 108.IR /proc/[pid]/cmdline
fee59977 109and
97949440 110.IR /proc/[pid]/status
fee59977
MK
111are now protected against other users.
112This makes it impossible to learn whether any user is running a
113specific program
114(so long as the program doesn't otherwise reveal itself by its behavior).
115.\" As an additional bonus, since
97949440 116.\" .IR /proc/[pid]/cmdline
fee59977
MK
117.\" is unaccessible for other users,
118.\" poorly written programs passing sensitive information via
119.\" program arguments are now protected against local eavesdroppers.
120.TP
1212
122As for mode 1, but in addition the
123.IR /proc/[pid]
124directories belonging to other users become invisible.
125This means that
126.IR /proc/[pid]
127entries can no longer be used to discover the PIDs on the system.
128This doesn't hide the fact that a process with a specific PID value exists
9bc87ed0 129(it can be learned by other means, for example, by "kill \-0 $PID"),
fee59977
MK
130but it hides a process's UID and GID,
131which could otherwise be learned by employing
132.BR stat (2)
133on a
134.IR /proc/[pid]
135directory.
136This greatly complicates an attacker's task of gathering
137information about running processes (e.g., discovering whether
138some daemon is running with elevated privileges,
139whether another user is running some sensitive program,
140whether other users are running any program at all, and so on).
141.RE
142.TP
143.BR gid "=\fIgid\fP (since Linux 3.3)"
144.\" commit 0499680a42141d86417a8fbaa8c8db806bea1201
145Specifies the ID of a group whose members are authorized to
146learn process information otherwise prohibited by
147.BR hidepid
95b1c1d1 148(i.e., users in this group behave as though
fee59977
MK
149.I /proc
150was mounted with
95b1c1d1 151.IR hidepid=0 ).
fee59977
MK
152This group should be used instead of approaches such as putting
153nonroot users into the
154.BR sudoers (5)
155file.
3c7cfa32
MK
156.\"
157.SS Overview
158Underneath
159.IR /proc ,
160there are the following general groups of files and subdirectories:
161.TP
162.IR /proc/[pid] " subdirectories"
163Each one of these subdirectories contains files and subdirectories
164exposing information about the process with the corresponding process ID.
165.IP
166Underneath each of the
167.I /proc/[pid]
168directories, a
169.I tasks
170subdirectory contains subdirectories of the form
171.IR tasks/[tid] ,
172which contain corresponding information about each of the threads
173in the process, where
174.I tid
175is the kernel thread ID of the thread.
01df7b70
MK
176.IP
177The
178.I /proc/[pid]
179subdirectories are visible when iterating through
180.I /proc
181with
182.BR getdents (2)
183(and thus are visible when one uses
184.BR ls (1)
185to view the contents of
186.IR /proc ).
187.TP
188.IR /proc/[tid] " subdirectories"
189Each one of these subdirectories contains files and subdirectories
190exposing information about the thread with the corresponding thread ID.
191.IP
192The
193.I /proc/[tid]
194subdirectories are
195.I not
196visible when iterating through
197.I /proc
198with
199.BR getdents (2)
200(and thus are
201.I not
202visible when one uses
203.BR ls (1)
3c7cfa32
MK
204to view the contents of
205.IR /proc ).
206.TP
207.I /proc/self
208When a process accesses this magic symbolic link,
209it resolves to the process's own
210.I /proc/[pid]
211directory.
212.TP
213.I /proc/thread-self
214When a thread accesses this magic symbolic link,
215it resolves to the process's own
216.I /proc/self/tasks/[tid]
217directory.
218.TP
219.I /proc/[a-z]*
220Various other files and subdirectories under
221.I /proc
222expose system-wide information.
223.PP
224All of the above are described in more detail below.
225.\"
fee59977 226.SS Files and directories
01df7b70 227The following list provides details of many of the files and directories under the
743638fd
MK
228.I /proc
229hierarchy.
fea681da 230.TP
69119dc7 231.I /proc/[pid]
fea681da
MK
232There is a numerical subdirectory for each running process; the
233subdirectory is named by the process ID.
1e6a8e2f
MK
234Each
235.I /proc/[pid]
e96ad1fd
MK
236subdirectory contains the pseudo-files and directories described below.
237.IP
238The files inside each
239.I /proc/[pid]
240directory are normally owned by the effective user and
3bdb8ec5
MK
241effective group ID of the process.
242However, as a security measure, the ownership is made
243.IR root:root
244if the process's "dumpable" attribute is set to a value other than 1.
fb49322d 245.IP
ae636827
MK
246Before Linux 4.11,
247.\" commit 68eb94f16227336a5773b83ecfa8290f1d6b78ce
248.IR root:root
249meant the "global" root user ID and group ID
250(i.e., UID 0 and GID 0 in the initial user namespace).
251Since Linux 4.11,
252if the process is in a noninitial user namespace that has a
253valid mapping for user (group) ID 0 inside the namespace, then
254the user (group) ownership of the files under
255.I /proc/[pid]
256is instead made the same as the root user (group) ID of the namespace.
257This means that inside a container,
258things work as expected for the container "root" user.
259.IP
fb49322d 260The process's "dumpable" attribute may change for the following reasons:
3bdb8ec5
MK
261.RS
262.IP * 3
263The attribute was explicitly set via the
264.BR prctl (2)
265.B PR_SET_DUMPABLE
266operation.
267.IP *
268The attribute was reset to the value in the file
269.IR /proc/sys/fs/suid_dumpable
270(described below), for the reasons described in
271.BR prctl (2).
272.RE
273.IP
274Resetting the "dumpable" attribute to 1 reverts the ownership of the
275.IR /proc/[pid]/*
eada5570 276files to the process's effective UID and GID.
b7a42567
MK
277.TP
278.I /proc/[pid]/attr
279.\" https://lwn.net/Articles/28222/
280.\" From: Stephen Smalley <sds@epoch.ncsc.mil>
281.\" To: LKML and others
282.\" Subject: [RFC][PATCH] Process Attribute API for Security Modules
283.\" Date: 08 Apr 2003 16:17:52 -0400
284.\"
b3fb99e8
MK
285.\" http://www.nsa.gov/research/_files/selinux/papers/module/x362.shtml
286.\"
b7a42567
MK
287The files in this directory provide an API for security modules.
288The contents of this directory are files that can be read and written
289in order to set security-related attributes.
290This directory was added to support SELinux,
291but the intention was that the API be general enough to support
292other security modules.
293For the purpose of explanation,
294examples of how SELinux uses these files are provided below.
2dad4c59 295.IP
b7a42567
MK
296This directory is present only if the kernel was configured with
297.BR CONFIG_SECURITY .
298.TP
299.IR /proc/[pid]/attr/current " (since Linux 2.6.0)"
300The contents of this file represent the current
301security attributes of the process.
2dad4c59 302.IP
fd44bdc7
TY
303In SELinux, this file is used to get the security context of a process.
304Prior to Linux 2.6.11, this file could not be used to set the security
305context (a write was always denied), since SELinux limited process security
306transitions to
b7a42567
MK
307.BR execve (2)
308(see the description of
309.IR /proc/[pid]/attr/exec ,
310below).
fd44bdc7
TY
311Since Linux 2.6.11, SELinux lifted this restriction and began supporting
312"set" operations via writes to this node if authorized by policy,
313although use of this operation is only suitable for applications that are
314trusted to maintain any desired separation between the old and new security
b6620a25
MK
315contexts.
316Prior to Linux 2.6.28, SELinux did not allow threads within a
fd44bdc7
TY
317multi-threaded process to set their security context via this node
318as it would yield an inconsistency among the security contexts of the
b6620a25
MK
319threads sharing the same memory space.
320Since Linux 2.6.28, SELinux lifted
fd44bdc7 321this restriction and began supporting "set" operations for threads within
b6620a25 322a multithreaded process if the new security context is bounded by the old
fd44bdc7
TY
323security context, where the bounded relation is defined in policy and
324guarantees that the new security context has a subset of the permissions
325of the old security context.
b7a42567
MK
326Other security modules may choose to support "set" operations via
327writes to this node.
328.TP
329.IR /proc/[pid]/attr/exec " (since Linux 2.6.0)"
330This file represents the attributes to assign to the
331process upon a subsequent
332.BR execve (2).
2dad4c59 333.IP
b7a42567
MK
334In SELinux,
335this is needed to support role/domain transitions, and
336.BR execve (2)
337is the preferred point to make such transitions because it offers better
338control over the initialization of the process in the new security label
339and the inheritance of state.
340In SELinux, this attribute is reset on
341.BR execve (2)
342so that the new program reverts to the default behavior for any
343.BR execve (2)
344calls that it may make.
345In SELinux, a process can set
346only its own
347.I /proc/[pid]/attr/exec
348attribute.
349.TP
350.IR /proc/[pid]/attr/fscreate " (since Linux 2.6.0)"
351This file represents the attributes to assign to files
352created by subsequent calls to
353.BR open (2),
354.BR mkdir (2),
355.BR symlink (2),
356and
357.BR mknod (2)
2dad4c59 358.IP
b7a42567
MK
359SELinux employs this file to support creation of a file
360(using the aforementioned system calls)
361in a secure state,
362so that there is no risk of inappropriate access being obtained
363between the time of creation and the time that attributes are set.
364In SELinux, this attribute is reset on
365.BR execve (2),
366so that the new program reverts to the default behavior for
367any file creation calls it may make, but the attribute will persist
368across multiple file creation calls within a program unless it is
369explicitly reset.
370In SELinux, a process can set only its own
371.IR /proc/[pid]/attr/fscreate
372attribute.
373.TP
666db07e
MK
374.IR /proc/[pid]/attr/keycreate " (since Linux 2.6.18)"
375.\" commit 4eb582cf1fbd7b9e5f466e3718a59c957e75254e
666db07e
MK
376If a process writes a security context into this file,
377all subsequently created keys
378.RB ( add_key (2))
379will be labeled with this context.
380For further information, see the kernel source file
6b3ead8f
ES
381.I Documentation/security/keys/core.rst
382(or file
383.\" commit b68101a1e8f0263dbc7b8375d2a7c57c6216fb76
384.I Documentation/security/keys.txt
385on Linux between 3.0 and 4.13, or
386.\" commit d410fa4ef99112386de5f218dd7df7b4fca910b4
387.I Documentation/keys.txt
388before Linux 3.0).
2702dc21 389.TP
93401860
MK
390.IR /proc/[pid]/attr/prev " (since Linux 2.6.0)"
391This file contains the security context of the process before the last
392.BR execve (2);
393that is, the previous value of
394.IR /proc/[pid]/attr/current .
395.TP
2702dc21
MK
396.IR /proc/[pid]/attr/socketcreate " (since Linux 2.6.18)"
397.\" commit 42c3e03ef6b298813557cdb997bd6db619cd65a2
398If a process writes a security context into this file,
399all subsequently created sockets will be labeled with this context.
39b35179
MK
400.TP
401.IR /proc/[pid]/autogroup " (since Linux 2.6.38)"
402.\" commit 5091faa449ee0b7d73bc296a93bca9540fc51d0a
403See
404.BR sched (7).
fea681da 405.TP
69119dc7 406.IR /proc/[pid]/auxv " (since 2.6.0-test7)"
857f1942 407This contains the contents of the ELF interpreter information passed
c13182ef 408to the process at exec time.
857f1942 409The format is one \fIunsigned long\fP ID
c13182ef 410plus one \fIunsigned long\fP value for each entry.
857f1942 411The last entry contains two zeros.
4c69c692
MK
412See also
413.BR getauxval (3).
2dad4c59 414.IP
82664739
MK
415Permission to access this file is governed by a ptrace access mode
416.B PTRACE_MODE_READ_FSCREDS
417check; see
418.BR ptrace (2).
b5d204d0 419.TP
8d708d6b 420.IR /proc/[pid]/cgroup " (since Linux 2.6.24)"
5c2181ad
MK
421See
422.BR cgroups (7).
76e0451c
MK
423.TP
424.IR /proc/[pid]/clear_refs " (since Linux 2.6.22)"
425.\" commit b813e931b4c8235bb42e301096ea97dbdee3e8fe (2.6.22)
426.\" commit 398499d5f3613c47f2143b8c54a04efb5d7a6da9 (2.6.32)
427.\" commit 040fa02077de01c7e08fa75be6125e4ca5636011 (3.11)
b4e9ee8f 428.\"
b4e9ee8f 429.\" "Clears page referenced bits shown in smaps output"
76e0451c 430.\" write-only, writable only by the owner of the process
2dad4c59 431.IP
76e0451c 432This is a write-only file, writable only by owner of the process.
2dad4c59 433.IP
76e0451c
MK
434The following values may be written to the file:
435.RS
436.TP
4371 (since Linux 2.6.22)
438.\" Internally: CLEAR_REFS_ALL
439Reset the PG_Referenced and ACCESSED/YOUNG
440bits for all the pages associated with the process.
441(Before kernel 2.6.32, writing any nonzero value to this file
442had this effect.)
443.TP
4442 (since Linux 2.6.32)
445.\" Internally: CLEAR_REFS_ANON
446Reset the PG_Referenced and ACCESSED/YOUNG
447bits for all anonymous pages associated with the process.
448.TP
4493 (since Linux 2.6.32)
450.\" Internally: CLEAR_REFS_MAPPED
451Reset the PG_Referenced and ACCESSED/YOUNG
452bits for all file-mapped pages associated with the process.
453.RE
454.IP
455Clearing the PG_Referenced and ACCESSED/YOUNG bits provides a method
456to measure approximately how much memory a process is using.
322d49fb 457One first inspects the values in the "Referenced" fields
76e0451c
MK
458for the VMAs shown in
459.IR /proc/[pid]/smaps
460to get an idea of the memory footprint of the
461process.
462One then clears the PG_Referenced and ACCESSED/YOUNG bits
463and, after some measured time interval,
322d49fb 464once again inspects the values in the "Referenced" fields
76e0451c
MK
465to get an idea of the change in memory footprint of the
466process during the measured interval.
467If one is interested only in inspecting the selected mapping types,
468then the value 2 or 3 can be used instead of 1.
2dad4c59 469.IP
dfdf642e 470Further values can be written to affect different properties:
76e0451c
MK
471.RS
472.TP
4734 (since Linux 3.11)
474Clear the soft-dirty bit for all the pages associated with the process.
475.\" Internally: CLEAR_REFS_SOFT_DIRTY
476This is used (in conjunction with
477.IR /proc/[pid]/pagemap )
478by the check-point restore system to discover which pages of a process
479have been dirtied since the file
480.IR /proc/[pid]/clear_refs
481was written to.
dfdf642e
NK
482.TP
4835 (since Linux 4.0)
484.\" Internally: CLEAR_REFS_MM_HIWATER_RSS
0989246e
MK
485Reset the peak resident set size ("high water mark") to the process's
486current resident set size value.
76e0451c
MK
487.RE
488.IP
489Writing any value to
490.IR /proc/[pid]/clear_refs
491other than those listed above has no effect.
2dad4c59 492.IP
76e0451c
MK
493The
494.IR /proc/[pid]/clear_refs
495file is present only if the
496.B CONFIG_PROC_PAGE_MONITOR
497kernel configuration option is enabled.
857f1942 498.TP
69119dc7 499.I /proc/[pid]/cmdline
6975c16e 500This read-only file holds the complete command line for the process,
b447cd58
MK
501unless the process is a zombie.
502.\" In 2.3.26, this also used to be true if the process was swapped out.
503In the latter case, there is nothing in this file:
75b94dc3 504that is, a read on this file will return 0 characters.
b447cd58 505The command-line arguments appear in this file as a set of
6596d270
MK
506strings separated by null bytes (\(aq\\0\(aq),
507with a further null byte after the last string.
32d7ef00
MK
508.TP
509.IR /proc/[pid]/comm " (since Linux 2.6.33)"
510.\" commit 4614a696bd1c3a9af3a08f0e5874830a85b889d4
511This file exposes the process's
512.I comm
513value\(emthat is, the command name associated with the process.
514Different threads in the same process may have different
515.I comm
516values, accessible via
517.IR /proc/[pid]/task/[tid]/comm .
518A thread may modify its
519.I comm
520value, or that of any of other thread in the same thread group (see
521the discussion of
522.B CLONE_THREAD
523in
524.BR clone (2)),
525by writing to the file
526.IR /proc/self/task/[tid]/comm .
527Strings longer than
528.B TASK_COMM_LEN
529(16) characters are silently truncated.
2dad4c59 530.IP
ef4f4031 531This file provides a superset of the
32d7ef00
MK
532.BR prctl (2)
533.B PR_SET_NAME
534and
535.B PR_GET_NAME
536operations, and is employed by
537.BR pthread_setname_np (3)
538when used to rename threads other than the caller.
fea681da 539.TP
7e07d950 540.IR /proc/[pid]/coredump_filter " (since Linux 2.6.23)"
b4e9ee8f
MK
541See
542.BR core (5).
5c411b17 543.TP
7e07d950
MK
544.IR /proc/[pid]/cpuset " (since Linux 2.6.12)"
545.\" and/proc/[pid]/task/[tid]/cpuset
5c411b17
MK
546See
547.BR cpuset (7).
b4e9ee8f 548.TP
69119dc7 549.I /proc/[pid]/cwd
c13182ef 550This is a symbolic link to the current working directory of the process.
59a40ed7
MK
551To find out the current working directory of process 20,
552for instance, you can do this:
2dad4c59 553.IP
59a40ed7 554.in +4n
37d5e699 555.EX
b43a3b30 556.RB "$" " cd /proc/20/cwd; /bin/pwd"
37d5e699 557.EE
59a40ed7 558.in
2dad4c59 559.IP
c13182ef
MK
560Note that the
561.I pwd
e7b489f0 562command is often a shell built-in, and might
c13182ef 563not work properly.
743638fd
MK
564In
565.BR bash (1),
566you may use
567.IR "pwd\ \-P" .
2dad4c59 568.IP
afcaf646 569.\" The following was still true as at kernel 2.6.13
c13182ef
MK
570In a multithreaded process, the contents of this symbolic link
571are not available if the main thread has already terminated
afcaf646 572(typically by calling
59a40ed7 573.BR pthread_exit (3)).
2dad4c59 574.IP
b902fe18
MK
575Permission to dereference or read
576.RB ( readlink (2))
577this symbolic link is governed by a ptrace access mode
578.B PTRACE_MODE_READ_FSCREDS
579check; see
580.BR ptrace (2).
fea681da 581.TP
69119dc7 582.I /proc/[pid]/environ
09651080
MK
583This file contains the initial environment that was set
584when the currently executing program was started via
585.BR execve (2).
f81fb444 586The entries are separated by null bytes (\(aq\\0\(aq),
b4e9ee8f 587and there may be a null byte at the end.
fea681da 588Thus, to print out the environment of process 1, you would do:
37d5e699 589.IP
a08ea57c 590.in +4n
37d5e699 591.EX
d1081b23 592.RB "$" " cat /proc/1/environ | tr \(aq\e000\(aq \(aq\en\(aq"
37d5e699 593.EE
a08ea57c 594.in
2dad4c59 595.IP
09651080
MK
596If, after an
597.BR execve (2),
598the process modifies its environment
c187d2a1 599(e.g., by calling functions such as
387e2438
MF
600.BR putenv (3)
601or modifying the
602.BR environ (7)
603variable directly),
09651080
MK
604this file will
605.I not
606reflect those changes.
2dad4c59 607.IP
c187d2a1 608Furthermore, a process may change the memory location that this file refers via
387e2438 609.BR prctl (2)
c187d2a1 610operations such as
387e2438 611.BR PR_SET_MM_ENV_START .
2dad4c59 612.IP
82664739
MK
613Permission to access this file is governed by a ptrace access mode
614.B PTRACE_MODE_READ_FSCREDS
615check; see
616.BR ptrace (2).
fea681da 617.TP
69119dc7 618.I /proc/[pid]/exe
fea681da 619Under Linux 2.2 and later, this file is a symbolic link
2d7195b8 620containing the actual pathname of the executed command.
c13182ef
MK
621This symbolic link can be dereferenced normally; attempting to open
622it will open the executable.
623You can even type
69119dc7 624.I /proc/[pid]/exe
06dd061c 625to run another copy of the same executable that is being run by
69119dc7 626process [pid].
7e3c767a
GJ
627If the pathname has been unlinked, the symbolic link will contain the
628string \(aq(deleted)\(aq appended to the original pathname.
afcaf646 629.\" The following was still true as at kernel 2.6.13
c13182ef
MK
630In a multithreaded process, the contents of this symbolic link
631are not available if the main thread has already terminated
afcaf646
MK
632(typically by calling
633.BR pthread_exit (3)).
2dad4c59 634.IP
b902fe18
MK
635Permission to dereference or read
636.RB ( readlink (2))
637this symbolic link is governed by a ptrace access mode
638.B PTRACE_MODE_READ_FSCREDS
639check; see
640.BR ptrace (2).
2dad4c59 641.IP
eb9a0b2f 642Under Linux 2.0 and earlier,
69119dc7 643.I /proc/[pid]/exe
c13182ef
MK
644is a pointer to the binary which was executed,
645and appears as a symbolic link.
646A
fea681da
MK
647.BR readlink (2)
648call on this file under Linux 2.0 returns a string in the format:
2dad4c59 649.IP
59a40ed7 650 [device]:inode
2dad4c59 651.IP
fea681da
MK
652For example, [0301]:1502 would be inode 1502 on device major 03 (IDE,
653MFM, etc. drives) minor 01 (first partition on the first drive).
2dad4c59 654.IP
fea681da 655.BR find (1)
59a40ed7
MK
656with the
657.I \-inum
658option can be used to locate the file.
fea681da 659.TP
d4529654 660.I /proc/[pid]/fd/
fea681da
MK
661This is a subdirectory containing one entry for each file which the
662process has open, named by its file descriptor, and which is a
c13182ef 663symbolic link to the actual file.
f78ed33a 664Thus, 0 is standard input, 1 standard output, 2 standard error, and so on.
2dad4c59 665.IP
f75715e0
MK
666For file descriptors for pipes and sockets,
667the entries will be symbolic links whose content is the
668file type with the inode.
d4529654
MF
669A
670.BR readlink (2)
671call on this file returns a string in the format:
2dad4c59 672.IP
d4529654 673 type:[inode]
2dad4c59 674.IP
f75715e0
MK
675For example,
676.I socket:[2248868]
677will be a socket and its inode is 2248868.
678For sockets, that inode can be used to find more information
679in one of the files under
d4529654 680.IR /proc/net/ .
2dad4c59 681.IP
2b7a2ac5
MK
682For file descriptors that have no corresponding inode
683(e.g., file descriptors produced by
89e284a2 684.BR bpf (2),
2b7a2ac5
MK
685.BR epoll_create (2),
686.BR eventfd (2),
687.BR inotify_init (2),
89e284a2 688.BR perf_event_open (2),
2b7a2ac5 689.BR signalfd (2),
89e284a2 690.BR timerfd_create (2),
2b7a2ac5 691and
e8675558 692.BR userfaultfd (2)),
2b7a2ac5 693the entry will be a symbolic link with contents of the form
2dad4c59 694.IP
2b7a2ac5 695 anon_inode:<file-type>
2dad4c59 696.IP
e2a5929d 697In many cases (but not all), the
2b7a2ac5
MK
698.I file-type
699is surrounded by square brackets.
2dad4c59 700.IP
2b7a2ac5
MK
701For example, an epoll file descriptor will have a symbolic link
702whose content is the string
703.IR "anon_inode:[eventpoll]" .
2dad4c59 704.IP
d4529654 705.\"The following was still true as at kernel 2.6.13
afcaf646 706In a multithreaded process, the contents of this directory
c13182ef 707are not available if the main thread has already terminated
afcaf646
MK
708(typically by calling
709.BR pthread_exit (3)).
2dad4c59 710.IP
20c1a631
MK
711Programs that take a filename as a command-line argument,
712but don't take input from standard input if no argument is supplied,
713and programs that write to a file named as a command-line argument,
714but don't send their output to standard output
59a40ed7 715if no argument is supplied, can nevertheless be made to use
20c1a631
MK
716standard input or standard output by using
717.IR /proc/[pid]/fd
718files as command-line arguments.
59a40ed7
MK
719For example, assuming that
720.I \-i
721is the flag designating an input file and
722.I \-o
723is the flag designating an output file:
37d5e699 724.IP
a08ea57c 725.in +4n
37d5e699 726.EX
b43a3b30 727.RB "$" " foobar \-i /proc/self/fd/0 \-o /proc/self/fd/1 ..."
37d5e699 728.EE
a08ea57c 729.in
2dad4c59 730.IP
fea681da
MK
731and you have a working filter.
732.\" The following is not true in my tests (MTK):
733.\" Note that this will not work for
734.\" programs that seek on their files, as the files in the fd directory
735.\" are not seekable.
2dad4c59 736.IP
59a40ed7
MK
737.I /proc/self/fd/N
738is approximately the same as
739.I /dev/fd/N
008f1ecc 740in some UNIX and UNIX-like systems.
c13182ef 741Most Linux MAKEDEV scripts symbolically link
59a40ed7
MK
742.I /dev/fd
743to
744.IR /proc/self/fd ,
745in fact.
2dad4c59 746.IP
59a40ed7
MK
747Most systems provide symbolic links
748.IR /dev/stdin ,
749.IR /dev/stdout ,
750and
751.IR /dev/stderr ,
752which respectively link to the files
753.IR 0 ,
754.IR 1 ,
755and
756.IR 2
757in
758.IR /proc/self/fd .
759Thus the example command above could be written as:
d6bd89f3 760.IP
59a40ed7 761.in +4n
37d5e699 762.EX
b43a3b30 763.RB "$" " foobar \-i /dev/stdin \-o /dev/stdout ..."
37d5e699 764.EE
59a40ed7 765.in
138a191e
MK
766.IP
767Permission to dereference or read
768.RB ( readlink (2))
769the symbolic links in this directory is governed by a ptrace access mode
770.B PTRACE_MODE_READ_FSCREDS
771check; see
772.BR ptrace (2).
81c8aeb6
LW
773.IP
774Note that for file descriptors referring to inodes (pipes and sockets, see above),
775those inodes still have permission bits and ownership information
776distinct from those of the
777.I /proc/[pid]/fd
778entry,
779and that the owner may differ from the user and group IDs of the process.
780An unprivileged process may lack permissions to open them, as in this example:
781.IP
782.in +4n
783.EX
784.RB "$" " echo test | sudo -u nobody cat"
785test
786.RB "$" " echo test | sudo -u nobody cat /proc/self/fd/0"
787cat: /proc/self/fd/0: Permission denied
788.EE
789.in
790.IP
791File descriptor 0 refers to the pipe created by the shell
792and owned by that shell's user, which is not
793.IR nobody ,
794so
795.B cat
796does not have permission to create a new file descriptor to read from that inode,
797even though it can still read from its existing file descriptor 0.
69ab425e 798.TP
7e07d950 799.IR /proc/[pid]/fdinfo/ " (since Linux 2.6.22)"
69ab425e
MK
800This is a subdirectory containing one entry for each file which the
801process has open, named by its file descriptor.
0275956d 802The files in this directory are readable only by the owner of the process.
69ab425e 803The contents of each file can be read to obtain information
0275956d
MK
804about the corresponding file descriptor.
805The content depends on the type of file referred to by the
d9cb0d7d 806corresponding file descriptor.
2dad4c59 807.IP
0275956d 808For regular files and directories, we see something like:
37d5e699 809.IP
69ab425e 810.in +4n
37d5e699 811.EX
69ab425e
MK
812.RB "$" " cat /proc/12015/fdinfo/4"
813pos: 1000
814flags: 01002002
0275956d 815mnt_id: 21
37d5e699 816.EE
69ab425e 817.in
2dad4c59 818.IP
9599cbb3
MK
819The fields are as follows:
820.RS
821.TP
69ab425e 822.I pos
9599cbb3
MK
823This is a decimal number showing the file offset.
824.TP
69ab425e 825.I flags
9599cbb3 826This is an octal number that displays the
69ab425e
MK
827file access mode and file status flags (see
828.BR open (2)).
d7e537ce
MK
829If the close-on-exec file descriptor flag is set, then
830.I flags
831will also include the value
832.BR O_CLOEXEC .
2dad4c59 833.IP
d7e537ce
MK
834Before Linux 3.1,
835.\" commit 1117f72ea0217ba0cc19f05adbbd8b9a397f5ab7
836this field incorrectly displayed the setting of
837.B O_CLOEXEC
838at the time the file was opened,
839rather than the current setting of the close-on-exec flag.
9599cbb3
MK
840.TP
841.I
0275956d 842.I mnt_id
9599cbb3 843This field, present since Linux 3.15,
0275956d
MK
844.\" commit 49d063cb353265c3af701bab215ac438ca7df36d
845is the ID of the mount point containing this file.
846See the description of
847.IR /proc/[pid]/mountinfo .
9599cbb3
MK
848.RE
849.IP
6e7622ee
MK
850For eventfd file descriptors (see
851.BR eventfd (2)),
b6a7fd50
MK
852we see (since Linux 3.8)
853.\" commit cbac5542d48127b546a23d816380a7926eee1c25
854the following fields:
2dad4c59 855.IP
6e7622ee 856.in +4n
37d5e699 857.EX
6e7622ee
MK
858pos: 0
859flags: 02
860mnt_id: 10
861eventfd-count: 40
37d5e699 862.EE
6e7622ee 863.in
2dad4c59 864.IP
6e7622ee
MK
865.I eventfd-count
866is the current value of the eventfd counter, in hexadecimal.
2dad4c59 867.IP
58d375dd
MK
868For epoll file descriptors (see
869.BR epoll (7)),
b6a7fd50
MK
870we see (since Linux 3.8)
871.\" commit 138d22b58696c506799f8de759804083ff9effae
872the following fields:
2dad4c59 873.IP
58d375dd 874.in +4n
37d5e699 875.EX
58d375dd
MK
876pos: 0
877flags: 02
878mnt_id: 10
879tfd: 9 events: 19 data: 74253d2500000009
880tfd: 7 events: 19 data: 74253d2500000007
37d5e699 881.EE
58d375dd 882.in
2dad4c59 883.IP
58d375dd
MK
884Each of the lines beginning
885.I tfd
886describes one of the file descriptors being monitored via
887the epoll file descriptor (see
888.BR epoll_ctl (2)
889for some details).
890The
891.IR tfd
892field is the number of the file descriptor.
893The
894.I events
895field is a hexadecimal mask of the events being monitored for this file
896descriptor.
897The
898.I data
899field is the data value associated with this file descriptor.
2dad4c59 900.IP
f8a14cac
MK
901For signalfd file descriptors (see
902.BR signalfd (2)),
b6a7fd50
MK
903we see (since Linux 3.8)
904.\" commit 138d22b58696c506799f8de759804083ff9effae
905the following fields:
2dad4c59 906.IP
f8a14cac 907.in +4n
37d5e699 908.EX
f8a14cac
MK
909pos: 0
910flags: 02
911mnt_id: 10
912sigmask: 0000000000000006
37d5e699 913.EE
f8a14cac 914.in
2dad4c59 915.IP
f8a14cac
MK
916.I sigmask
917is the hexadecimal mask of signals that are accepted via this
918signalfd file descriptor.
919(In this example, bits 2 and 3 are set, corresponding to the signals
920.B SIGINT
921and
922.BR SIGQUIT ;
923see
924.BR signal (7).)
2dad4c59 925.IP
4e77145c
MK
926For inotify file descriptors (see
927.BR inotify (7)),
928we see (since Linux 3.8)
929the following fields:
2dad4c59 930.IP
4e77145c 931.in +4n
37d5e699 932.EX
4e77145c
MK
933pos: 0
934flags: 00
935mnt_id: 11
936inotify wd:2 ino:7ef82a sdev:800001 mask:800afff ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:2af87e00220ffd73
937inotify wd:1 ino:192627 sdev:800001 mask:800afff ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:27261900802dfd73
37d5e699 938.EE
4e77145c 939.in
2dad4c59 940.IP
4e77145c
MK
941Each of the lines beginning with "inotify" displays information about
942one file or directory that is being monitored.
943The fields in this line are as follows:
944.RS
945.TP
946.I wd
947A watch descriptor number (in decimal).
948.TP
949.I ino
950The inode number of the target file (in hexadecimal).
951.TP
952.I sdev
953The ID of the device where the target file resides (in hexadecimal).
954.TP
955.I mask
956The mask of events being monitored for the target file (in hexadecimal).
957.RE
958.IP
959If the kernel was built with exportfs support, the path to the target
960file is exposed as a file handle, via three hexadecimal fields:
961.IR fhandle-bytes ,
962.IR fhandle-type ,
963and
964.IR f_handle .
2dad4c59 965.IP
e2444bcb
MK
966For fanotify file descriptors (see
967.BR fanotify (7)),
968we see (since Linux 3.8)
969the following fields:
2dad4c59 970.IP
e2444bcb 971.in +4n
37d5e699 972.EX
e2444bcb
MK
973pos: 0
974flags: 02
975mnt_id: 11
976fanotify flags:0 event-flags:88002
977fanotify ino:19264f sdev:800001 mflags:0 mask:1 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:4f261900a82dfd73
37d5e699 978.EE
e2444bcb 979.in
2dad4c59 980.IP
e2444bcb
MK
981The fourth line displays information defined when the fanotify group
982was created via
983.BR fanotify_init (2):
984.RS
985.TP
986.I flags
987The
988.I flags
989argument given to
990.BR fanotify_init (2)
991(expressed in hexadecimal).
992.TP
993.I event-flags
994The
995.I event_f_flags
996argument given to
997.BR fanotify_init (2)
998(expressed in hexadecimal).
999.RE
1000.IP
1001Each additional line shown in the file contains information
1002about one of the marks in the fanotify group.
1003Most of these fields are as for inotify, except:
1004.RS
1005.TP
1006.I mflags
1007The flags associated with the mark
1008(expressed in hexadecimal).
1009.TP
1010.I mask
1011The events mask for this mark
1012(expressed in hexadecimal).
1013.TP
1014.I ignored_mask
1015The mask of events that are ignored for this mark
1016(expressed in hexadecimal).
1017.RE
1018.IP
1019For details on these fields, see
1020.BR fanotify_mark (2).
340a16a6
LW
1021.IP
1022For timerfd file descriptors (see
1023.BR timerfd (2)),
1024we see (since Linux 3.17)
cd595f62 1025.\" commit af9c4957cf212ad9cf0bee34c95cb11de5426e85
340a16a6
LW
1026the following fields:
1027.IP
1028.in +4n
1029.EX
1030pos: 0
1031flags: 02004002
1032mnt_id: 13
1033clockid: 0
1034ticks: 0
1035settime flags: 03
1036it_value: (7695568592, 640020877)
1037it_interval: (0, 0)
1038.EE
1039.in
1cdbc3a6
MK
1040.RS
1041.TP
340a16a6 1042.I clockid
1cdbc3a6 1043This is the numeric value of the clock ID
734ec506
MK
1044(corresponding to one of the
1045.B CLOCK_*
1046constants defined via
a6425049 1047.IR <time.h> )
cb5a67a4 1048that is used to mark the progress of the timer (in this example, 0 is
340a16a6 1049.BR CLOCK_REALTIME ).
1cdbc3a6 1050.TP
340a16a6 1051.I ticks
1cdbc3a6
MK
1052This is the number of timer expirations that have occurred,
1053(i.e., the value that
340a16a6 1054.BR read (2)
1cdbc3a6
MK
1055on it would return).
1056.TP
340a16a6 1057.I settime flags
1cdbc3a6 1058This field lists the flags with which the timerfd was last armed (see
340a16a6
LW
1059.BR timerfd_settime (2)),
1060in octal
1061(in this example, both
1062.B TFD_TIMER_ABSTIME
1063and
1064.B TFD_TIMER_CANCEL_ON_SET
1065are set).
1cdbc3a6 1066.TP
340a16a6 1067.I it_value
1cdbc3a6
MK
1068This field contains the amount of time until the timer will next expire,
1069expressed in seconds and nanoseconds.
734ec506
MK
1070This is always expressed as a relative value,
1071regardless of whether the timer was created using the
1072.B TFD_TIMER_ABSTIME
1073flag.
1cdbc3a6 1074.TP
340a16a6 1075.I it_interval
1cdbc3a6
MK
1076This field contains the interval of the timer,
1077in seconds and nanoseconds.
1078(The
1079.I it_value
1080and
1081.I it_interval
1082fields contain the values that
340a16a6 1083.BR timerfd_gettime (2)
1cdbc3a6
MK
1084on this file descriptor would return.)
1085.RE
0ca2fc4d 1086.TP
93401860
MK
1087.IR /proc/[pid]/gid_map " (since Linux 3.5)"
1088See
1089.BR user_namespaces (7).
1090.TP
0ca2fc4d 1091.IR /proc/[pid]/io " (since kernel 2.6.20)"
68f11066
MK
1092.\" commit 7c3ab7381e79dfc7db14a67c6f4f3285664e1ec2
1093This file contains I/O statistics for the process, for example:
37d5e699 1094.IP
0ca2fc4d 1095.in +4n
37d5e699 1096.EX
0ca2fc4d
PS
1097.RB "#" " cat /proc/3828/io"
1098rchar: 323934931
1099wchar: 323929600
1100syscr: 632687
1101syscw: 632675
1102read_bytes: 0
1103write_bytes: 323932160
1104cancelled_write_bytes: 0
37d5e699 1105.EE
0ca2fc4d 1106.in
2dad4c59 1107.IP
0ca2fc4d
PS
1108The fields are as follows:
1109.RS
68f11066
MK
1110.TP
1111.IR rchar ": characters read"
0ca2fc4d
PS
1112The number of bytes which this task has caused to be read from storage.
1113This is simply the sum of bytes which this process passed to
1114.BR read (2)
68f11066 1115and similar system calls.
11256884 1116It includes things such as terminal I/O and
68f11066
MK
1117is unaffected by whether or not actual
1118physical disk I/O was required (the read might have been satisfied from
0ca2fc4d 1119pagecache).
68f11066
MK
1120.TP
1121.IR wchar ": characters written"
0ca2fc4d
PS
1122The number of bytes which this task has caused, or shall cause to be written
1123to disk.
1124Similar caveats apply here as with
1125.IR rchar .
68f11066
MK
1126.TP
1127.IR syscr ": read syscalls"
1128Attempt to count the number of read I/O operations\(emthat is,
1129system calls such as
0ca2fc4d
PS
1130.BR read (2)
1131and
1132.BR pread (2).
68f11066
MK
1133.TP
1134.IR syscw ": write syscalls"
1135Attempt to count the number of write I/O operations\(emthat is,
1136system calls such as
0ca2fc4d
PS
1137.BR write (2)
1138and
1139.BR pwrite (2).
68f11066
MK
1140.TP
1141.IR read_bytes ": bytes read"
0ca2fc4d
PS
1142Attempt to count the number of bytes which this process really did cause to
1143be fetched from the storage layer.
1144This is accurate for block-backed filesystems.
68f11066
MK
1145.TP
1146.IR write_bytes ": bytes written"
0ca2fc4d
PS
1147Attempt to count the number of bytes which this process caused to be sent to
1148the storage layer.
68f11066 1149.TP
0ca2fc4d 1150.IR cancelled_write_bytes :
0ca2fc4d
PS
1151The big inaccuracy here is truncate.
1152If a process writes 1MB to a file and then deletes the file,
1153it will in fact perform no writeout.
1154But it will have been accounted as having caused 1MB of write.
68f11066 1155In other words: this field represents the number of bytes which this process
0ca2fc4d 1156caused to not happen, by truncating pagecache.
68f11066 1157A task can cause "negative" I/O too.
0ca2fc4d 1158If this task truncates some dirty pagecache,
68f11066
MK
1159some I/O which another task has been accounted for
1160(in its
1161.IR write_bytes )
1162will not be happening.
1163.RE
0ca2fc4d
PS
1164.IP
1165.IR Note :
68f11066 1166In the current implementation, things are a bit racy on 32-bit systems:
0ca2fc4d
PS
1167if process A reads process B's
1168.I /proc/[pid]/io
68f11066 1169while process B is updating one of these 64-bit counters,
0ca2fc4d 1170process A could see an intermediate result.
2dad4c59 1171.IP
d8e2972a
MK
1172Permission to access this file is governed by a ptrace access mode
1173.B PTRACE_MODE_READ_FSCREDS
1174check; see
1175.BR ptrace (2).
f6e17121 1176.TP
7e07d950 1177.IR /proc/[pid]/limits " (since Linux 2.6.24)"
69ab425e
MK
1178This file displays the soft limit, hard limit, and units of measurement
1179for each of the process's resource limits (see
1180.BR getrlimit (2)).
1181Up to and including Linux 2.6.35,
1182this file is protected to allow reading only by the real UID of the process.
1183Since Linux 2.6.36,
1184.\" commit 3036e7b490bf7878c6dae952eec5fb87b1106589
1185this file is readable by all users on the system.
df2a8576
MK
1186.\" FIXME Describe /proc/[pid]/loginuid
1187.\" Added in 2.6.11; updating requires CAP_AUDIT_CONTROL
1188.\" CONFIG_AUDITSYSCALL
b4f89985
PE
1189.TP
1190.IR /proc/[pid]/map_files/ " (since kernel 3.3)
18cdd0ac
MK
1191.\" commit 640708a2cff7f81e246243b0073c66e6ece7e53e
1192This subdirectory contains entries corresponding to memory-mapped
b4f89985
PE
1193files (see
1194.BR mmap (2)).
18cdd0ac
MK
1195Entries are named by memory region start and end
1196address pair (expressed as hexadecimal numbers),
1197and are symbolic links to the mapped files themselves.
1198Here is an example, with the output wrapped and reformatted to fit on an 80-column display:
37d5e699 1199.IP
b4f89985 1200.in +4n
37d5e699 1201.EX
f2aa4dcc 1202.RB "#" " ls -l /proc/self/map_files/"
18cdd0ac 1203lr\-\-\-\-\-\-\-\-. 1 root root 64 Apr 16 21:31
9bc87ed0 1204 3252e00000\-3252e20000 \-> /usr/lib64/ld\-2.15.so
b4f89985 1205\&...
37d5e699 1206.EE
b4f89985 1207.in
2dad4c59 1208.IP
b4f89985 1209Although these entries are present for memory regions that were
d6a56978 1210mapped with the
b4f89985 1211.BR MAP_FILE
18cdd0ac 1212flag, the way anonymous shared memory (regions created with the
b4f89985
PE
1213.B MAP_ANON | MAP_SHARED
1214flags)
1215is implemented in Linux
18cdd0ac
MK
1216means that such regions also appear on this directory.
1217Here is an example where the target file is the deleted
1218.I /dev/zero
1219one:
37d5e699 1220.IP
b4f89985 1221.in +4n
37d5e699 1222.EX
18cdd0ac
MK
1223lrw\-\-\-\-\-\-\-. 1 root root 64 Apr 16 21:33
1224 7fc075d2f000\-7fc075e6f000 \-> /dev/zero (deleted)
37d5e699 1225.EE
b4f89985 1226.in
2dad4c59 1227.IP
b4f89985
PE
1228This directory appears only if the
1229.B CONFIG_CHECKPOINT_RESTORE
1230kernel configuration option is enabled.
f2aa4dcc
MK
1231Privilege
1232.RB ( CAP_SYS_ADMIN )
1233.\" FIXME
1234.\" This may change. See the mail thread
43d42cc0 1235.\" "[RFC][PATCH v2] procfs: Always expose /proc/<pid>/map_files/ and make it readable"
f2aa4dcc
MK
1236.\" from Jan 2015
1237is required to view the contents of this directory.
fea681da 1238.TP
69119dc7 1239.I /proc/[pid]/maps
fea681da
MK
1240A file containing the currently mapped memory regions and their access
1241permissions.
bbf9f397
MK
1242See
1243.BR mmap (2)
1244for some further information about memory mappings.
2dad4c59 1245.IP
aee2f0bf
MK
1246Permission to access this file is governed by a ptrace access mode
1247.B PTRACE_MODE_READ_FSCREDS
1248check; see
1249.BR ptrace (2).
2dad4c59 1250.IP
dd0c3b96 1251The format of the file is:
c1a022dc
MK
1252.IP
1253.in 4n
1254.EX
21781757 1255.I "address perms offset dev inode pathname"
9bc87ed0
MK
125600400000\-00452000 r-xp 00000000 08:02 173521 /usr/bin/dbus-daemon
125700651000\-00652000 r--p 00051000 08:02 173521 /usr/bin/dbus-daemon
125800652000\-00655000 rw-p 00052000 08:02 173521 /usr/bin/dbus-daemon
125900e03000\-00e24000 rw-p 00000000 00:00 0 [heap]
126000e24000\-011f7000 rw-p 00000000 00:00 0 [heap]
182090db 1261\&...
9bc87ed0
MK
126235b1800000\-35b1820000 r-xp 00000000 08:02 135522 /usr/lib64/ld\-2.15.so
126335b1a1f000\-35b1a20000 r--p 0001f000 08:02 135522 /usr/lib64/ld\-2.15.so
126435b1a20000\-35b1a21000 rw-p 00020000 08:02 135522 /usr/lib64/ld\-2.15.so
126535b1a21000\-35b1a22000 rw-p 00000000 00:00 0
126635b1c00000\-35b1dac000 r-xp 00000000 08:02 135870 /usr/lib64/libc\-2.15.so
126735b1dac000\-35b1fac000 ---p 001ac000 08:02 135870 /usr/lib64/libc\-2.15.so
126835b1fac000\-35b1fb0000 r--p 001ac000 08:02 135870 /usr/lib64/libc\-2.15.so
126935b1fb0000\-35b1fb2000 rw-p 001b0000 08:02 135870 /usr/lib64/libc\-2.15.so
182090db 1270\&...
9bc87ed0 1271f2c6ff8c000\-7f2c7078c000 rw-p 00000000 00:00 0 [stack:986]
182090db 1272\&...
9bc87ed0
MK
12737fffb2c0d000\-7fffb2c2e000 rw-p 00000000 00:00 0 [stack]
12747fffb2d48000\-7fffb2d49000 r-xp 00000000 00:00 0 [vdso]
c1a022dc 1275.EE
21781757 1276.in
c1a022dc 1277.IP
7d2e6d74 1278The
3eb8c588
MK
1279.I address
1280field is the address space in the process that the mapping occupies.
1281The
1282.I perms
1283field is a set of permissions:
2dad4c59 1284.IP
37d5e699
MK
1285.in +4
1286.EX
fea681da
MK
1287r = read
1288w = write
1289x = execute
1290s = shared
1291p = private (copy on write)
37d5e699 1292.EE
fea681da 1293.in
2dad4c59 1294.IP
3eb8c588
MK
1295The
1296.I offset
b844cf04 1297field is the offset into the file/whatever;
3eb8c588
MK
1298.I dev
1299is the device
dd0c3b96 1300(major:minor);
3eb8c588
MK
1301.I inode
1302is the inode on that device.
59a40ed7 13030 indicates that no inode is associated with the memory region,
16e64bae 1304as would be the case with BSS (uninitialized data).
2dad4c59 1305.IP
3eb8c588
MK
1306The
1307.I pathname
1308field will usually be the file that is backing the mapping.
491ea6f1 1309For ELF files,
3eb8c588
MK
1310you can easily coordinate with the
1311.I offset
1312field by looking at the
491ea6f1
MK
1313Offset field in the ELF program headers
1314.RI ( "readelf\ \-l" ).
2dad4c59 1315.IP
491ea6f1 1316There are additional helpful pseudo-paths:
61b0b1f4
MK
1317.RS 12
1318.TP
1319.IR [stack]
16e64bae 1320The initial process's (also known as the main thread's) stack.
61b0b1f4 1321.TP
3eb8c588 1322.IR [stack:<tid>] " (since Linux 3.4)"
a60894c5 1323.\" commit b76437579d1344b612cf1851ae610c636cec7db0
61b0b1f4 1324A thread's stack (where the
3eb8c588 1325.IR <tid>
61b0b1f4 1326is a thread ID).
491ea6f1 1327It corresponds to the
3eb8c588 1328.IR /proc/[pid]/task/[tid]/
37d32c38 1329path.
61b0b1f4 1330.TP
7d2e6d74 1331.IR [vdso]
61b0b1f4 1332The virtual dynamically linked shared object.
c56a0185
MK
1333See
1334.BR vdso (7).
61b0b1f4 1335.TP
7d2e6d74 1336.IR [heap]
61b0b1f4
MK
1337The process's heap.
1338.in
61b0b1f4
MK
1339.RE
1340.IP
3eb8c588
MK
1341If the
1342.I pathname
1343field is blank,
40382e5e
MK
1344this is an anonymous mapping as obtained via
1345.BR mmap (2).
61b0b1f4
MK
1346There is no easy way to coordinate this back to a process's source,
1347short of running it through
491ea6f1
MK
1348.BR gdb (1),
1349.BR strace (1),
1350or similar.
2dad4c59 1351.IP
b6547479
EK
1352.I pathname
1353is shown unescaped except for newline characters, which are replaced
d512e7b4
MK
1354with an octal escape sequence.
1355As a result, it is not possible to determine whether the original
1356pathname contained a newline character or the literal
b6547479
EK
1357.I \\\012
1358character sequence.
1359.IP
1360If the mapping is file-backed and the file has been deleted, the string
d512e7b4
MK
1361" (deleted)" is appended to the pathname.
1362Note that this is ambiguous too.
b6547479 1363.IP
eb9a0b2f 1364Under Linux 2.0, there is no field giving pathname.
fea681da 1365.TP
69119dc7 1366.I /proc/[pid]/mem
fea681da
MK
1367This file can be used to access the pages of a process's memory through
1368.BR open (2),
1369.BR read (2),
1370and
ccb2bb0d 1371.BR lseek (2).
2dad4c59 1372.IP
aee2f0bf
MK
1373Permission to access this file is governed by a ptrace access mode
1374.B PTRACE_MODE_ATTACH_FSCREDS
1375check; see
1376.BR ptrace (2).
b4e9ee8f 1377.TP
69119dc7 1378.IR /proc/[pid]/mountinfo " (since Linux 2.6.26)"
b4e9ee8f 1379.\" This info adapted from Documentation/filesystems/proc.txt
fb4bdaa1 1380.\" commit 2d4d4864ac08caff5c204a752bd004eed4f08760
ef5b47f6
MK
1381This file contains information about mount points
1382in the process's mount namespace (see
1383.BR mount_namespaces (7)).
fb4bdaa1
MK
1384It supplies various information
1385(e.g., propagation state, root of mount for bind mounts,
1386identifier for each mount and its parent) that is missing from the (older)
1387.IR /proc/[pid]/mounts
1388file, and fixes various other problems with that file
1389(e.g., nonextensibility,
1390failure to distinguish per-mount versus per-superblock options).
2dad4c59 1391.IP
fb4bdaa1 1392The file contains lines of the form:
c1a022dc
MK
1393.IP
1394.in 0n
1395.EX
0f619d1f 139636 35 98:0 /mnt1 /mnt2 rw,noatime master:1 \- ext3 /dev/root rw,errors=continue
b4e9ee8f 1397(1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
c1a022dc
MK
1398.in
1399.EE
b4e9ee8f
MK
1400.IP
1401The numbers in parentheses are labels for the descriptions below:
3bc960c2 1402.RS 7
b4e9ee8f
MK
1403.TP 5
1404(1)
0f619d1f 1405mount ID: a unique ID for the mount (may be reused after
b4e9ee8f
MK
1406.BR umount (2)).
1407.TP
1408(2)
29270550
MK
1409parent ID: the ID of the parent mount
1410(or of self for the root of this mount namespace's mount tree).
1411.IP
8c420ed8
MK
1412If a new mount is stacked on top of a previous existing mount
1413(so that it hides the existing mount) at pathname P,
1414then the parent of the new mount is the previous mount at that location.
1415Thus, when looking at all the mounts stacked at a particular location,
1416the top-most mount is the one that is not the parent
1417of any other mount at the same location.
1418(Note, however, that this top-most mount will be accessible only if
1419the longest path subprefix of P that is a mount point
1420is not itself hidden by a stacked mount.)
1421.IP
29270550
MK
1422If the parent mount point lies outside the process's root directory (see
1423.BR chroot (2)),
1424the ID shown here won't have a corresponding record in
35cf1b93 1425.I mountinfo
29270550
MK
1426whose mount ID (field 1) matches this parent mount ID
1427(because mount points that lie outside the process's root directory
1428are not shown in
1429.IR mountinfo ).
1430As a special case of this point,
1431the process's root mount point may have a parent mount
1432(for the initramfs filesystem) that lies
1433.\" Miklos Szeredi, Nov 2017: The hidden one is the initramfs, I believe
1434.\" mtk: In the initial mount namespace, this hidden ID has the value 0
1435outside the process's root directory,
1436and an entry for that mount point will not appear in
1437.IR mountinfo .
b4e9ee8f
MK
1438.TP
1439(3)
0f619d1f 1440major:minor: the value of
b4e9ee8f 1441.I st_dev
0f619d1f 1442for files on this filesystem (see
b4e9ee8f
MK
1443.BR stat (2)).
1444.TP
1445(4)
0f619d1f 1446root: the pathname of the directory in the filesystem
8d857fcb 1447which forms the root of this mount.
b4e9ee8f
MK
1448.TP
1449(5)
ebdc66e2 1450mount point: the pathname of the mount point relative
0f619d1f 1451to the process's root directory.
b4e9ee8f
MK
1452.TP
1453(6)
1454mount options: per-mount options.
1455.TP
1456(7)
0f619d1f 1457optional fields: zero or more fields of the form "tag[:value]"; see below.
b4e9ee8f
MK
1458.TP
1459(8)
0f619d1f 1460separator: the end of the optional fields is marked by a single hyphen.
b4e9ee8f
MK
1461.TP
1462(9)
0f619d1f 1463filesystem type: the filesystem type in the form "type[.subtype]".
b4e9ee8f
MK
1464.TP
1465(10)
9ee4a2b6 1466mount source: filesystem-specific information or "none".
b4e9ee8f
MK
1467.TP
1468(11)
68d86eac 1469super options: per-superblock options.
b4e9ee8f
MK
1470.RE
1471.IP
966b5839
MK
1472Currently, the possible optional fields are
1473.IR shared ,
1474.IR master ,
1475.IR propagate_from ,
1476and
1477.IR unbindable .
1478See
1479.BR mount_namespaces (7)
1480for a description of these fields.
0f619d1f
MK
1481Parsers should ignore all unrecognized optional fields.
1482.IP
b4e9ee8f
MK
1483For more information on mount propagation see:
1484.I Documentation/filesystems/sharedsubtree.txt
66a9882e 1485in the Linux kernel source tree.
b4e9ee8f 1486.TP
cea61382 1487.IR /proc/[pid]/mounts " (since Linux 2.4.19)"
226cb3a8 1488This file lists all the filesystems currently mounted in the
ef5b47f6
MK
1489process's mount namespace (see
1490.BR mount_namespaces (7)).
cea61382
MK
1491The format of this file is documented in
1492.BR fstab (5).
2dad4c59 1493.IP
cea61382
MK
1494Since kernel version 2.6.15, this file is pollable:
1495after opening the file for reading, a change in this file
9ee4a2b6 1496(i.e., a filesystem mount or unmount) causes
cea61382 1497.BR select (2)
226cb3a8 1498to mark the file descriptor as having an exceptional condition, and
cea61382
MK
1499.BR poll (2)
1500and
1501.BR epoll_wait (2)
226cb3a8
MK
1502mark the file as having a priority event
1503.RB ( POLLPRI ).
1504(Before Linux 2.6.30,
1505a change in this file was indicated by the file descriptor
1506being marked as readable for
1507.BR select (2),
1508and being marked as having an error condition for
1509.BR poll (2)
1510and
1511.BR epoll_wait (2).)
cea61382 1512.TP
69119dc7 1513.IR /proc/[pid]/mountstats " (since Linux 2.6.17)"
783a6233 1514This file exports information (statistics, configuration information)
ef5b47f6
MK
1515about the mount points in the process's mount namespace (see
1516.BR mount_namespaces (7)).
b4e9ee8f 1517Lines in this file have the form:
37d5e699
MK
1518.IP
1519.in +4n
1520.EX
b4e9ee8f
MK
1521device /dev/sda7 mounted on /home with fstype ext3 [statistics]
1522( 1 ) ( 2 ) (3 ) (4)
37d5e699
MK
1523.EE
1524.in
b4e9ee8f
MK
1525.IP
1526The fields in each line are:
3bc960c2 1527.RS 7
b4e9ee8f
MK
1528.TP 5
1529(1)
1530The name of the mounted device
1531(or "nodevice" if there is no corresponding device).
1532.TP
1533(2)
9ee4a2b6 1534The mount point within the filesystem tree.
b4e9ee8f
MK
1535.TP
1536(3)
9ee4a2b6 1537The filesystem type.
b4e9ee8f
MK
1538.TP
1539(4)
1540Optional statistics and configuration information.
9ee4a2b6 1541Currently (as at Linux 2.6.26), only NFS filesystems export
b4e9ee8f
MK
1542information via this field.
1543.RE
1544.IP
90878f7c 1545This file is readable only by the owner of the process.
b4e9ee8f 1546.TP
2d3fb75b 1547.IR /proc/[pid]/net " (since Linux 2.6.25)"
9fb88bc8
MK
1548See the description of
1549.IR /proc/net .
1550.TP
b4a185e5 1551.IR /proc/[pid]/ns/ " (since Linux 3.0)"
2c4201f0 1552.\" See commit 6b4e306aa3dc94a0545eb9279475b1ab6209a31f
b4a185e5
EB
1553This is a subdirectory containing one entry for each namespace that
1554supports being manipulated by
80e63655 1555.BR setns (2).
cf8bfe6d
MK
1556For more information, see
1557.BR namespaces (7).
b4a185e5 1558.TP
69119dc7 1559.IR /proc/[pid]/numa_maps " (since Linux 2.6.14)"
610f75cc
MK
1560See
1561.BR numa (7).
7388733a 1562.TP
69119dc7 1563.IR /proc/[pid]/oom_adj " (since Linux 2.6.11)"
b4e9ee8f 1564This file can be used to adjust the score used to select which process
0425de01 1565should be killed in an out-of-memory (OOM) situation.
b4e9ee8f
MK
1566The kernel uses this value for a bit-shift operation of the process's
1567.IR oom_score
1568value:
5b8dbfd4
MK
1569valid values are in the range \-16 to +15,
1570plus the special value \-17,
b4e9ee8f
MK
1571which disables OOM-killing altogether for this process.
1572A positive score increases the likelihood of this
1573process being killed by the OOM-killer;
1574a negative score decreases the likelihood.
de8e9cc1 1575.IP
b4e9ee8f
MK
1576The default value for this file is 0;
1577a new process inherits its parent's
1578.I oom_adj
1579setting.
1580A process must be privileged
1581.RB ( CAP_SYS_RESOURCE )
1582to update this file.
f2c8b197
MK
1583.IP
1584Since Linux 2.6.36, use of this file is deprecated in favor of
1585.IR /proc/[pid]/oom_score_adj .
b4e9ee8f 1586.TP
69119dc7 1587.IR /proc/[pid]/oom_score " (since Linux 2.6.11)"
5753354a
MF
1588.\" See mm/oom_kill.c::badness() in pre 2.6.36 sources
1589.\" See mm/oom_kill.c::oom_badness() after 2.6.36
1590.\" commit a63d83f427fbce97a6cea0db2e64b0eb8435cd10
b4e9ee8f
MK
1591This file displays the current score that the kernel gives to
1592this process for the purpose of selecting a process
1593for the OOM-killer.
1594A higher score means that the process is more likely to be
1595selected by the OOM-killer.
1596The basis for this score is the amount of memory used by the process,
1597with increases (+) or decreases (\-) for factors including:
5753354a
MF
1598.\" See mm/oom_kill.c::badness() in pre 2.6.36 sources
1599.\" See mm/oom_kill.c::oom_badness() after 2.6.36
1600.\" commit a63d83f427fbce97a6cea0db2e64b0eb8435cd10
1601.RS
1602.IP * 2
9b0e3937 1603whether the process is privileged (\-).
5753354a
MF
1604.\" More precisely, if it has CAP_SYS_ADMIN or (pre 2.6.36) CAP_SYS_RESOURCE
1605.RE
1606.IP
1607Before kernel 2.6.36 the following factors were also used in the calculation of oom_score:
b4e9ee8f
MK
1608.RS
1609.IP * 2
1610whether the process creates a lot of children using
1611.BR fork (2)
1612(+);
1613.IP *
1614whether the process has been running a long time,
1615or has used a lot of CPU time (\-);
1616.IP *
5753354a 1617whether the process has a low nice value (i.e., > 0) (+); and
b4e9ee8f
MK
1618.IP *
1619whether the process is making direct hardware access (\-).
1620.\" More precisely, if it has CAP_SYS_RAWIO
1621.RE
1622.IP
1623The
1624.I oom_score
f2c8b197
MK
1625also reflects the adjustment specified by the
1626.I oom_score_adj
1627or
b4e9ee8f
MK
1628.I oom_adj
1629setting for the process.
f2c8b197
MK
1630.TP
1631.IR /proc/[pid]/oom_score_adj " (since Linux 2.6.36)"
1632.\" Text taken from 3.7 Documentation/filesystems/proc.txt
1633This file can be used to adjust the badness heuristic used to select which
1634process gets killed in out-of-memory conditions.
2dad4c59 1635.IP
f2c8b197
MK
1636The badness heuristic assigns a value to each candidate task ranging from 0
1637(never kill) to 1000 (always kill) to determine which process is targeted.
1638The units are roughly a proportion along that range of
1639allowed memory the process may allocate from,
1640based on an estimation of its current memory and swap use.
1641For example, if a task is using all allowed memory,
1642its badness score will be 1000.
1643If it is using half of its allowed memory, its score will be 500.
2dad4c59 1644.IP
f2c8b197
MK
1645There is an additional factor included in the badness score: root
1646processes are given 3% extra memory over other tasks.
2dad4c59 1647.IP
f2c8b197 1648The amount of "allowed" memory depends on the context
0633f951 1649in which the OOM-killer was called.
f2c8b197
MK
1650If it is due to the memory assigned to the allocating task's cpuset
1651being exhausted,
1652the allowed memory represents the set of mems assigned to that
1653cpuset (see
1654.BR cpuset (7)).
1655If it is due to a mempolicy's node(s) being exhausted,
1656the allowed memory represents the set of mempolicy nodes.
1657If it is due to a memory limit (or swap limit) being reached,
1658the allowed memory is that configured limit.
1659Finally, if it is due to the entire system being out of memory, the
1660allowed memory represents all allocatable resources.
2dad4c59 1661.IP
f2c8b197 1662The value of
0633f951 1663.I oom_score_adj
f2c8b197
MK
1664is added to the badness score before it
1665is used to determine which task to kill.
1666Acceptable values range from \-1000
1667(OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX).
0633f951 1668This allows user space to control the preference for OOM-killing,
f2c8b197 1669ranging from always preferring a certain
f082ada4 1670task or completely disabling it from OOM killing.
f2c8b197 1671The lowest possible value, \-1000, is
0633f951 1672equivalent to disabling OOM-killing entirely for that task,
f2c8b197 1673since it will always report a badness score of 0.
2dad4c59 1674.IP
f2c8b197
MK
1675Consequently, it is very simple for user space to define
1676the amount of memory to consider for each task.
48ac01a7 1677Setting an
f2c8b197
MK
1678.I oom_score_adj
1679value of +500, for example,
1680is roughly equivalent to allowing the remainder of tasks sharing the
1681same system, cpuset, mempolicy, or memory controller resources
1682to use at least 50% more memory.
1683A value of \-500, on the other hand, would be roughly
1684equivalent to discounting 50% of the task's
1685allowed memory from being considered as scoring against the task.
2dad4c59 1686.IP
0633f951 1687For backward compatibility with previous kernels,
f2c8b197
MK
1688.I /proc/[pid]/oom_adj
1689can still be used to tune the badness score.
1690Its value is
9f1b9726 1691scaled linearly with
f2c8b197 1692.IR oom_score_adj .
2dad4c59 1693.IP
f2c8b197
MK
1694Writing to
1695.IR /proc/[pid]/oom_score_adj
1696or
1697.IR /proc/[pid]/oom_adj
1698will change the other with its scaled value.
6f752251
MK
1699.IP
1700The
1701.BR choom (1)
1702program provides a command-line interface for adjusting the
1703.I oom_score_adj
1704value of a running process or a newly executed command.
b0aa1e51
MK
1705.TP
1706.IR /proc/[pid]/pagemap " (since Linux 2.6.25)"
1707This file shows the mapping of each of the process's virtual pages
1708into physical page frames or swap area.
1709It contains one 64-bit value for each virtual page,
1710with the bits set as follows:
1711.RS 12
1712.TP
171363
1714If set, the page is present in RAM.
1715.TP
171662
1717If set, the page is in swap space
1718.TP
171961 (since Linux 3.5)
1720The page is a file-mapped page or a shared anonymous page.
1721.TP
2e84528d 172260\(en57 (since Linux 3.11)
b0aa1e51
MK
1723Zero
1724.\" Not quite true; see commit 541c237c0923f567c9c4cabb8a81635baadc713f
1725.TP
2e84528d 172656 (since Linux 4.2)
abfbcb56
MK
1727.\" commit 77bb499bb60f4b79cca7d139c8041662860fcf87
1728.\" commit 83b4b0bb635eee2b8e075062e4e008d1bc110ed7
2e84528d
OE
1729The page is exclusively mapped.
1730.TP
b5301584 173155 (since Linux 3.11)
b0aa1e51
MK
1732PTE is soft-dirty
1733(see the kernel source file
f9326a24 1734.IR Documentation/admin-guide/mm/soft-dirty.rst ).
b0aa1e51 1735.TP
9bc87ed0 173654\(en0
b0aa1e51
MK
1737If the page is present in RAM (bit 63), then these bits
1738provide the page frame number, which can be used to index
1739.IR /proc/kpageflags
1740and
1741.IR /proc/kpagecount .
1742If the page is present in swap (bit 62),
9bc87ed0 1743then bits 4\(en0 give the swap type, and bits 54\(en5 encode the swap offset.
b0aa1e51
MK
1744.RE
1745.IP
9bc87ed0 1746Before Linux 3.11, bits 60\(en55 were
b0aa1e51
MK
1747used to encode the base-2 log of the page size.
1748.IP
1749To employ
1750.IR /proc/[pid]/pagemap
1751efficiently, use
1752.IR /proc/[pid]/maps
1753to determine which areas of memory are actually mapped and seek
1754to skip over unmapped regions.
1755.IP
1756The
1757.IR /proc/[pid]/pagemap
1758file is present only if the
1759.B CONFIG_PROC_PAGE_MONITOR
1760kernel configuration option is enabled.
2dad4c59 1761.IP
aee2f0bf
MK
1762Permission to access this file is governed by a ptrace access mode
1763.B PTRACE_MODE_READ_FSCREDS
1764check; see
1765.BR ptrace (2).
7c2905d1
MK
1766.TP
1767.IR /proc/[pid]/personality " (since Linux 2.6.28)"
1768.\" commit 478307230810d7e2a753ed220db9066dfdf88718
1769This read-only file exposes the process's execution domain, as set by
1770.BR personality (2).
1771The value is displayed in hexadecimal notation.
2dad4c59 1772.IP
4834ae91
MK
1773Permission to access this file is governed by a ptrace access mode
1774.B PTRACE_MODE_ATTACH_FSCREDS
1775check; see
1776.BR ptrace (2).
fea681da 1777.TP
69119dc7 1778.I /proc/[pid]/root
008f1ecc 1779UNIX and Linux support the idea of a per-process root of the
9ee4a2b6 1780filesystem, set by the
fea681da 1781.BR chroot (2)
c13182ef
MK
1782system call.
1783This file is a symbolic link that points to the process's
14d70713
MK
1784root directory, and behaves in the same way as
1785.IR exe ,
1786and
1787.IR fd/* .
2dad4c59 1788.IP
948f0ff4 1789Note however that this file is not merely a symbolic link.
2b312241
MF
1790It provides the same view of the filesystem (including namespaces and the
1791set of per-process mounts) as the process itself.
a77efd58
MK
1792An example illustrates this point.
1793In one terminal, we start a shell in new user and mount namespaces,
1794and in that shell we create some new mount points:
2dad4c59 1795.IP
a77efd58 1796.in +4n
37d5e699 1797.EX
a77efd58
MK
1798$ \fBPS1='sh1# ' unshare \-Urnm\fP
1799sh1# \fBmount \-t tmpfs tmpfs /etc\fP # Mount empty tmpfs at /etc
1800sh1# \fBmount \-\-bind /usr /dev\fP # Mount /usr at /dev
89f92905 1801sh1# \fBecho $$\fP
a77efd58 180227123
37d5e699 1803.EE
a77efd58 1804.in
2dad4c59 1805.IP
a77efd58
MK
1806In a second terminal window, in the initial mount namespace,
1807we look at the contents of the corresponding mounts in
1808the initial and new namespaces:
2dad4c59 1809.IP
a77efd58 1810.in +4n
37d5e699 1811.EX
89f92905 1812$ \fBPS1='sh2# ' sudo sh\fP
a77efd58
MK
1813sh2# \fBls /etc | wc \-l\fP # In initial NS
1814309
1815sh2# \fBls /proc/27123/root/etc | wc \-l\fP # /etc in other NS
18160 # The empty tmpfs dir
1817sh2# \fBls /dev | wc \-l\fP # In initial NS
1818205
1819sh2# \fBls /proc/27123/root/dev | wc \-l\fP # /dev in other NS
182011 # Actually bind
1821 # mounted to /usr
1822sh2# \fBls /usr | wc \-l\fP # /usr in initial NS
182311
37d5e699 1824.EE
a77efd58 1825.in
2dad4c59 1826.IP
afcaf646 1827.\" The following was still true as at kernel 2.6.13
3ed7270e
MK
1828In a multithreaded process, the contents of the
1829.I /proc/[pid]/root
1830symbolic link are not available if the main thread has already terminated
afcaf646
MK
1831(typically by calling
1832.BR pthread_exit (3)).
2dad4c59 1833.IP
b902fe18
MK
1834Permission to dereference or read
1835.RB ( readlink (2))
1836this symbolic link is governed by a ptrace access mode
1837.B PTRACE_MODE_READ_FSCREDS
1838check; see
1839.BR ptrace (2).
f34f0182 1840.\" FIXME Describe /proc/[pid]/projid_map
43d42cc0
MK
1841.\" Added in 3.7
1842.\" commit f76d207a66c3a53defea67e7d36c3eb1b7d6d61d
15869389
MK
1843.TP
1844.IR /proc/[pid]/seccomp " (Linux 2.6.12 to 2.6.22)"
1845This file can be used to read and change the process's
1846secure computing (seccomp) mode setting.
1847It contains the value 0 if the process is not in seccomp mode,
1848and 1 if the process is in strict seccomp mode (see
1849.BR seccomp (2)).
1850Writing 1 to this file places the process irreversibly in strict seccomp mode.
1851(Further attempts to write to the file fail with the
1852.B EPERM
1853error.)
2dad4c59 1854.IP
15869389
MK
1855In Linux 2.6.23,
1856this file went away, to be replaced by the
1857.BR prctl (2)
1858.BR PR_GET_SECCOMP
1859and
1860.BR PR_SET_SECCOMP
1861operations (and later by
1862.BR seccomp (2)
1863and the
1864.I Seccomp
1865field in
1866.IR /proc/[pid]/status ).
69119dc7 1867.\" FIXME Describe /proc/[pid]/sessionid
b3fb99e8 1868.\" commit 1e0bd7550ea9cf474b1ad4c6ff5729a507f75fdc
b4e9ee8f 1869.\" CONFIG_AUDITSYSCALL
43d42cc0 1870.\" Added in 2.6.25; read-only; only readable by real UID
bea08fec 1871.\"
69119dc7 1872.\" FIXME Describe /proc/[pid]/sched
b4e9ee8f
MK
1873.\" Added in 2.6.23
1874.\" CONFIG_SCHED_DEBUG, and additional fields if CONFIG_SCHEDSTATS
1875.\" Displays various scheduling parameters
1876.\" This file can be written, to reset stats
ef4f4031 1877.\" The set of fields exposed by this file have changed
b3fb99e8
MK
1878.\" significantly over time.
1879.\" commit 43ae34cb4cd650d1eb4460a8253a8e747ba052ac
1880.\"
69119dc7
MK
1881.\" FIXME Describe /proc/[pid]/schedstats and
1882.\" /proc/[pid]/task/[tid]/schedstats
b4e9ee8f
MK
1883.\" Added in 2.6.9
1884.\" CONFIG_SCHEDSTATS
fea681da 1885.TP
5c92b1b7 1886.IR /proc/[pid]/setgroups " (since Linux 3.19)"
ab28dba9
MK
1887See
1888.BR user_namespaces (7).
d520465b 1889.TP
69119dc7 1890.IR /proc/[pid]/smaps " (since Linux 2.6.14)"
b07b19c4 1891This file shows memory consumption for each of the process's mappings.
859503c3
MK
1892(The
1893.BR pmap (1)
1894command displays similar information,
1895in a form that may be easier for parsing.)
1f0add28 1896For each mapping there is a series of lines such as the following:
37d5e699 1897.IP
a08ea57c 1898.in +4n
37d5e699 1899.EX
9bc87ed0 190000400000\-0048a000 r\-xp 00000000 fd:03 960637 /bin/bash
95fe794d
PG
1901Size: 552 kB
1902Rss: 460 kB
1903Pss: 100 kB
1904Shared_Clean: 452 kB
1905Shared_Dirty: 0 kB
1906Private_Clean: 8 kB
1907Private_Dirty: 0 kB
1908Referenced: 460 kB
1909Anonymous: 0 kB
1910AnonHugePages: 0 kB
4ad958e1
MK
1911ShmemHugePages: 0 kB
1912ShmemPmdMapped: 0 kB
95fe794d
PG
1913Swap: 0 kB
1914KernelPageSize: 4 kB
1915MMUPageSize: 4 kB
6861f8f0
MK
1916KernelPageSize: 4 kB
1917MMUPageSize: 4 kB
95fe794d 1918Locked: 0 kB
2f057281 1919ProtectionKey: 0
eb848708 1920VmFlags: rd ex mr mw me dw
37d5e699 1921.EE
a08ea57c 1922.in
2d3fb75b 1923.IP
b07b19c4
MK
1924The first of these lines shows the same information as is displayed
1925for the mapping in
69119dc7 1926.IR /proc/[pid]/maps .
c3d59262 1927The following lines show the size of the mapping,
95fe794d 1928the amount of the mapping that is currently resident in RAM ("Rss"),
a5a3e91b 1929the process's proportional share of this mapping ("Pss"),
1f0add28 1930the number of clean and dirty shared pages in the mapping,
c7ce200d 1931and the number of clean and dirty private pages in the mapping.
95fe794d 1932"Referenced" indicates the amount of memory currently marked as
1f0add28
MK
1933referenced or accessed.
1934"Anonymous" shows the amount of memory
1935that does not belong to any file.
1936"Swap" shows how much
95fe794d 1937would-be-anonymous memory is also used, but out on swap.
2dad4c59 1938.IP
6861f8f0
MK
1939The "KernelPageSize" line (available since Linux 2.6.29)
1940is the page size used by the kernel to back the virtual memory area.
1f0add28
MK
1941This matches the size used by the MMU in the majority of cases.
1942However, one counter-example occurs on PPC64 kernels
6861f8f0 1943whereby a kernel using 64kB as a base page size may still use 4kB
1f0add28 1944pages for the MMU on older processors.
6861f8f0
MK
1945To distinguish the two attributes, the "MMUPageSize" line
1946(also available since Linux 2.6.29)
1947reports the page size used by the MMU.
2dad4c59 1948.IP
95fe794d
PG
1949The "Locked" indicates whether the mapping is locked in memory
1950or not.
2dad4c59 1951.IP
9b780b06
MK
1952The "ProtectionKey" line (available since Linux 4.9, on x86 only)
1953contains the memory protection key (see
1954.BR pkeys (7))
1955associated with the virtual memory area.
1956This entry is present only if the kernel was built with the
1957.B CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
1958configuration option.
2dad4c59 1959.IP
eb848708
MK
1960The "VmFlags" line (available since Linux 3.8)
1961represents the kernel flags associated with the virtual memory area,
1962encoded using the following two-letter codes:
2dad4c59 1963.IP
95fe794d 1964 rd - readable
1f0add28 1965 wr - writable
95fe794d
PG
1966 ex - executable
1967 sh - shared
1968 mr - may read
1969 mw - may write
1970 me - may execute
1971 ms - may share
723e333c 1972 gd - stack segment grows down
95fe794d
PG
1973 pf - pure PFN range
1974 dw - disabled write to the mapped file
1975 lo - pages are locked in memory
1976 io - memory mapped I/O area
1977 sr - sequential read advise provided
1978 rr - random read advise provided
1979 dc - do not copy area on fork
1980 de - do not expand area on remapping
1981 ac - area is accountable
1982 nr - swap space is not reserved for the area
1983 ht - area uses huge tlb pages
1984 nl - non-linear mapping
1985 ar - architecture specific flag
1986 dd - do not include area into core dump
1987 sd - soft-dirty flag
1988 mm - mixed map area
1989 hg - huge page advise flag
1990 nh - no-huge page advise flag
b5408a0f 1991 mg - mergeable advise flag
2dad4c59 1992.IP
be729d66
DH
1993"ProtectionKey" field contains the memory protection key (see
1994.BR pkeys (5))
1995associated with the virtual memory area.
f12f1b9b 1996Present only if the kernel was built with the
be729d66
DH
1997.B CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
1998configuration option. (since Linux 4.6)
2dad4c59 1999.IP
e618d945
MK
2000The
2001.IR /proc/[pid]/smaps
2002file is present only if the
2003.B CONFIG_PROC_PAGE_MONITOR
2004kernel configuration option is enabled.
b07b19c4 2005.TP
67aac6fb
MK
2006.IR /proc/[pid]/stack " (since Linux 2.6.29)"
2007.\" 2ec220e27f5040aec1e88901c1b6ea3d135787ad
2008This file provides a symbolic trace of the function calls in this
2009process's kernel stack.
2010This file is provided only if the kernel was built with the
2011.B CONFIG_STACKTRACE
2012configuration option.
2dad4c59 2013.IP
4834ae91
MK
2014Permission to access this file is governed by a ptrace access mode
2015.B PTRACE_MODE_ATTACH_FSCREDS
2016check; see
2017.BR ptrace (2).
67aac6fb 2018.TP
69119dc7 2019.I /proc/[pid]/stat
c13182ef
MK
2020Status information about the process.
2021This is used by
2022.BR ps (1).
082bf5b8
MK
2023It is defined in the kernel source file
2024.IR fs/proc/array.c "."
2dad4c59 2025.IP
fea681da
MK
2026The fields, in order, with their proper
2027.BR scanf (3)
b02b4b74
MK
2028format specifiers, are listed below.
2029Whether or not certain of these fields display valid information is governed by
2030a ptrace access mode
2031.BR PTRACE_MODE_READ_FSCREDS "\ |\ " PTRACE_MODE_NOAUDIT
2032check (refer to
2033.BR ptrace (2)).
2034If the check denies access, then the field value is displayed as 0.
2035The affected fields are indicated with the marking [PT].
2dad4c59 2036.IP
fea681da 2037.RS
62e4a418
MK
2038.TP 10
2039(1) \fIpid\fP \ %d
2040.br
2041The process ID.
fea681da 2042.TP
62e4a418
MK
2043(2) \fIcomm\fP \ %s
2044The filename of the executable, in parentheses.
c13182ef 2045This is visible whether or not the executable is swapped out.
fea681da 2046.TP
62e4a418 2047(3) \fIstate\fP \ %c
31293f37
MK
2048One of the following characters, indicating process state:
2049.RS
2050.IP R 3
2051Running
2052.IP S
2053Sleeping in an interruptible wait
2054.IP D
2055Waiting in uninterruptible
2056disk sleep
2057.IP Z
2058Zombie
2059.IP T
2060Stopped (on a signal) or (before Linux 2.6.33) trace stopped
2061.IP t
2062.\" commit 44d90df6b757c59651ddd55f1a84f28132b50d29
2063Tracing stop (Linux 2.6.33 onward)
2064.IP W
2065Paging (only before Linux 2.6.0)
2066.IP X
ef4f4031 2067Dead (from Linux 2.6.0 onward)
31293f37
MK
2068.IP x
2069.\" commit 44d90df6b757c59651ddd55f1a84f28132b50d29
2070Dead (Linux 2.6.33 to
2071.\" commit 74e37200de8e9c4e09b70c21c3f13c2071e77457
20723.13 only)
2073.IP K
2074.\" commit 44d90df6b757c59651ddd55f1a84f28132b50d29
2075Wakekill (Linux 2.6.33 to
2076.\" commit 74e37200de8e9c4e09b70c21c3f13c2071e77457
20773.13 only)
2078.IP W
2079.\" commit 44d90df6b757c59651ddd55f1a84f28132b50d29
2080Waking (Linux 2.6.33 to
2081.\" commit 74e37200de8e9c4e09b70c21c3f13c2071e77457
20823.13 only)
2083.IP P
2084.\" commit f2530dc71cf0822f90bb63ea4600caaef33a66bb
2085Parked (Linux 3.9 to
2086.\" commit 74e37200de8e9c4e09b70c21c3f13c2071e77457
20873.13 only)
2088.RE
fea681da 2089.TP
62e4a418 2090(4) \fIppid\fP \ %d
e0fdc57c 2091The PID of the parent of this process.
fea681da 2092.TP
62e4a418
MK
2093(5) \fIpgrp\fP \ %d
2094The process group ID of the process.
fea681da 2095.TP
62e4a418
MK
2096(6) \fIsession\fP \ %d
2097The session ID of the process.
fea681da 2098.TP
62e4a418
MK
2099(7) \fItty_nr\fP \ %d
2100The controlling terminal of the process.
59a40ed7
MK
2101(The minor device number is contained in the combination of bits
210231 to 20 and 7 to 0;
b97deb97 2103the major device number is in bits 15 to 8.)
fea681da 2104.TP
62e4a418 2105(8) \fItpgid\fP \ %d
fea681da 2106.\" This field and following, up to and including wchan added 0.99.1
62e4a418 2107The ID of the foreground process group of the controlling
59a40ed7 2108terminal of the process.
fea681da 2109.TP
62e4a418
MK
2110(9) \fIflags\fP \ %u
2111The kernel flags word of the process.
c13182ef 2112For bit meanings,
66a9882e 2113see the PF_* defines in the Linux kernel source file
00702acc 2114.IR include/linux/sched.h .
fea681da 2115Details depend on the kernel version.
2dad4c59 2116.IP
62e4a418 2117The format for this field was %lu before Linux 2.6.
fea681da 2118.TP
ee566744 2119(10) \fIminflt\fP \ %lu
62e4a418 2120The number of minor faults the process has made which have not
fea681da
MK
2121required loading a memory page from disk.
2122.TP
62e4a418
MK
2123(11) \fIcminflt\fP \ %lu
2124The number of minor faults that the process's
fea681da
MK
2125waited-for children have made.
2126.TP
62e4a418
MK
2127(12) \fImajflt\fP \ %lu
2128The number of major faults the process has made which have
fea681da
MK
2129required loading a memory page from disk.
2130.TP
62e4a418
MK
2131(13) \fIcmajflt\fP \ %lu
2132The number of major faults that the process's
fea681da
MK
2133waited-for children have made.
2134.TP
62e4a418
MK
2135(14) \fIutime\fP \ %lu
2136Amount of time that this process has been scheduled in user mode,
7a017e24 2137measured in clock ticks (divide by
67914165 2138.IR sysconf(_SC_CLK_TCK) ).
a1c9dc59
MK
2139This includes guest time, \fIguest_time\fP
2140(time spent running a virtual CPU, see below),
2141so that applications that are not aware of the guest time field
2142do not lose that time from their calculations.
fea681da 2143.TP
62e4a418
MK
2144(15) \fIstime\fP \ %lu
2145Amount of time that this process has been scheduled in kernel mode,
7a017e24 2146measured in clock ticks (divide by
67914165 2147.IR sysconf(_SC_CLK_TCK) ).
fea681da 2148.TP
62e4a418
MK
2149(16) \fIcutime\fP \ %ld
2150Amount of time that this process's
7a017e24
MK
2151waited-for children have been scheduled in user mode,
2152measured in clock ticks (divide by
67914165 2153.IR sysconf(_SC_CLK_TCK) ).
c13182ef 2154(See also
fea681da 2155.BR times (2).)
a1c9dc59
MK
2156This includes guest time, \fIcguest_time\fP
2157(time spent running a virtual CPU, see below).
fea681da 2158.TP
62e4a418
MK
2159(17) \fIcstime\fP \ %ld
2160Amount of time that this process's
7a017e24
MK
2161waited-for children have been scheduled in kernel mode,
2162measured in clock ticks (divide by
67914165 2163.IR sysconf(_SC_CLK_TCK) ).
fea681da 2164.TP
62e4a418
MK
2165(18) \fIpriority\fP \ %ld
2166(Explanation for Linux 2.6)
59a40ed7
MK
2167For processes running a real-time scheduling policy
2168.RI ( policy
2169below; see
2170.BR sched_setscheduler (2)),
2171this is the negated scheduling priority, minus one;
2172that is, a number in the range \-2 to \-100,
2173corresponding to real-time priorities 1 to 99.
2174For processes running under a non-real-time scheduling policy,
2175this is the raw nice value
2176.RB ( setpriority (2))
2177as represented in the kernel.
2178The kernel stores nice values as numbers
2179in the range 0 (high) to 39 (low),
2180corresponding to the user-visible nice range of \-20 to 19.
2dad4c59 2181.IP
59a40ed7
MK
2182Before Linux 2.6, this was a scaled value based on
2183the scheduler weighting given to this process.
2184.\" And back in kernel 1.2 days things were different again.
fea681da 2185.TP
62e4a418
MK
2186(19) \fInice\fP \ %ld
2187The nice value (see
59a40ed7
MK
2188.BR setpriority (2)),
2189a value in the range 19 (low priority) to \-20 (high priority).
2190.\" Back in kernel 1.2 days things were different.
fea681da
MK
2191.\" .TP
2192.\" \fIcounter\fP %ld
2193.\" The current maximum size in jiffies of the process's next timeslice,
2194.\" or what is currently left of its current timeslice, if it is the
2195.\" currently running process.
2196.\" .TP
2197.\" \fItimeout\fP %u
2198.\" The time in jiffies of the process's next timeout.
0e94f77b 2199.\" timeout was removed sometime around 2.1/2.2
aa610245 2200.TP
62e4a418
MK
2201(20) \fInum_threads\fP \ %ld
2202Number of threads in this process (since Linux 2.6).
bb83d1b9 2203Before kernel 2.6, this field was hard coded to 0 as a placeholder
0e94f77b 2204for an earlier removed field.
fea681da 2205.TP
62e4a418
MK
2206(21) \fIitrealvalue\fP \ %ld
2207The time in jiffies before the next
8bd58774
MK
2208.B SIGALRM
2209is sent to the process due to an interval timer.
0e94f77b
MK
2210Since kernel 2.6.17, this field is no longer maintained,
2211and is hard coded as 0.
fea681da 2212.TP
62e4a418
MK
2213(22) \fIstarttime\fP \ %llu
2214The time the process started after system boot.
055024ed
MK
2215In kernels before Linux 2.6, this value was expressed in jiffies.
2216Since Linux 2.6, the value is expressed in clock ticks (divide by
2217.IR sysconf(_SC_CLK_TCK) ).
2dad4c59 2218.IP
62e4a418 2219The format for this field was %lu before Linux 2.6.
fea681da 2220.TP
62e4a418
MK
2221(23) \fIvsize\fP \ %lu
2222Virtual memory size in bytes.
fea681da 2223.TP
62e4a418
MK
2224(24) \fIrss\fP \ %ld
2225Resident Set Size: number of pages the process has in real memory.
c13182ef 2226This is just the pages which
5fab2e7c 2227count toward text, data, or stack space.
c13182ef 2228This does not include pages
fea681da
MK
2229which have not been demand-loaded in, or which are swapped out.
2230.TP
62e4a418
MK
2231(25) \fIrsslim\fP \ %lu
2232Current soft limit in bytes on the rss of the process;
59a40ed7
MK
2233see the description of
2234.B RLIMIT_RSS
2235in
2b5407af 2236.BR getrlimit (2).
fea681da 2237.TP
b02b4b74 2238(26) \fIstartcode\fP \ %lu \ [PT]
62e4a418 2239The address above which program text can run.
fea681da 2240.TP
b02b4b74 2241(27) \fIendcode\fP \ %lu \ [PT]
62e4a418 2242The address below which program text can run.
fea681da 2243.TP
b02b4b74 2244(28) \fIstartstack\fP \ %lu \ [PT]
62e4a418 2245The address of the start (i.e., bottom) of the stack.
fea681da 2246.TP
b02b4b74 2247(29) \fIkstkesp\fP \ %lu \ [PT]
62e4a418 2248The current value of ESP (stack pointer), as found in the
fea681da
MK
2249kernel stack page for the process.
2250.TP
b02b4b74 2251(30) \fIkstkeip\fP \ %lu \ [PT]
62e4a418 2252The current EIP (instruction pointer).
fea681da 2253.TP
62e4a418
MK
2254(31) \fIsignal\fP \ %lu
2255The bitmap of pending signals, displayed as a decimal number.
59a40ed7 2256Obsolete, because it does not provide information on real-time signals; use
69119dc7 2257.I /proc/[pid]/status
59a40ed7 2258instead.
fea681da 2259.TP
62e4a418
MK
2260(32) \fIblocked\fP \ %lu
2261The bitmap of blocked signals, displayed as a decimal number.
59a40ed7 2262Obsolete, because it does not provide information on real-time signals; use
69119dc7 2263.I /proc/[pid]/status
59a40ed7 2264instead.
fea681da 2265.TP
62e4a418
MK
2266(33) \fIsigignore\fP \ %lu
2267The bitmap of ignored signals, displayed as a decimal number.
59a40ed7 2268Obsolete, because it does not provide information on real-time signals; use
69119dc7 2269.I /proc/[pid]/status
59a40ed7 2270instead.
fea681da 2271.TP
62e4a418
MK
2272(34) \fIsigcatch\fP \ %lu
2273The bitmap of caught signals, displayed as a decimal number.
59a40ed7 2274Obsolete, because it does not provide information on real-time signals; use
69119dc7 2275.I /proc/[pid]/status
59a40ed7 2276instead.
fea681da 2277.TP
b02b4b74 2278(35) \fIwchan\fP \ %lu \ [PT]
62e4a418 2279This is the "channel" in which the process is waiting.
2054f761
MK
2280It is the address of a location in the kernel where the process is sleeping.
2281The corresponding symbolic name can be found in
2282.IR /proc/[pid]/wchan .
fea681da 2283.TP
62e4a418 2284(36) \fInswap\fP \ %lu
0633f951 2285.\" nswap was added in 2.0
4d9b6984 2286Number of pages swapped (not maintained).
fea681da 2287.TP
62e4a418 2288(37) \fIcnswap\fP \ %lu
0633f951 2289.\" cnswap was added in 2.0
4d9b6984 2290Cumulative \fInswap\fP for child processes (not maintained).
fea681da 2291.TP
62e4a418
MK
2292(38) \fIexit_signal\fP \ %d \ (since Linux 2.1.22)
2293Signal to be sent to parent when we die.
fea681da 2294.TP
62e4a418
MK
2295(39) \fIprocessor\fP \ %d \ (since Linux 2.2.8)
2296CPU number last executed on.
568105c6 2297.TP
62e4a418
MK
2298(40) \fIrt_priority\fP \ %u \ (since Linux 2.5.19)
2299Real-time scheduling priority, a number in the range 1 to 99 for
59a40ed7
MK
2300processes scheduled under a real-time policy,
2301or 0, for non-real-time processes (see
568105c6
MK
2302.BR sched_setscheduler (2)).
2303.TP
62e4a418
MK
2304(41) \fIpolicy\fP \ %u \ (since Linux 2.5.19)
2305Scheduling policy (see
568105c6 2306.BR sched_setscheduler (2)).
cd60dedd 2307Decode using the SCHED_* constants in
59a40ed7 2308.IR linux/sched.h .
2dad4c59 2309.IP
62e4a418 2310The format for this field was %lu before Linux 2.6.22.
167450d6 2311.TP
62e4a418
MK
2312(42) \fIdelayacct_blkio_ticks\fP \ %llu \ (since Linux 2.6.18)
2313Aggregated block I/O delays, measured in clock ticks (centiseconds).
14c06953 2314.TP
62e4a418
MK
2315(43) \fIguest_time\fP \ %lu \ (since Linux 2.6.24)
2316Guest time of the process (time spent running a virtual CPU
7a017e24 2317for a guest operating system), measured in clock ticks (divide by
67914165 2318.IR sysconf(_SC_CLK_TCK) ).
14c06953 2319.TP
62e4a418
MK
2320(44) \fIcguest_time\fP \ %ld \ (since Linux 2.6.24)
2321Guest time of the process's children, measured in clock ticks (divide by
67914165 2322.IR sysconf(_SC_CLK_TCK) ).
fea681da 2323.TP
b02b4b74 2324(45) \fIstart_data\fP \ %lu \ (since Linux 3.3) \ [PT]
0be30a54 2325.\" commit b3f7f573a20081910e34e99cbc91831f4f02f1ff
62e4a418 2326Address above which program initialized and
426bc8d7 2327uninitialized (BSS) data are placed.
12449ae3 2328.TP
b02b4b74 2329(46) \fIend_data\fP \ %lu \ (since Linux 3.3) \ [PT]
0be30a54 2330.\" commit b3f7f573a20081910e34e99cbc91831f4f02f1ff
62e4a418 2331Address below which program initialized and
426bc8d7 2332uninitialized (BSS) data are placed.
12449ae3 2333.TP
b02b4b74 2334(47) \fIstart_brk\fP \ %lu \ (since Linux 3.3) \ [PT]
0be30a54 2335.\" commit b3f7f573a20081910e34e99cbc91831f4f02f1ff
62e4a418 2336Address above which program heap can be expanded with
426bc8d7 2337.BR brk (2).
12449ae3 2338.TP
b02b4b74 2339(48) \fIarg_start\fP \ %lu \ (since Linux 3.5) \ [PT]
0be30a54 2340.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
62e4a418 2341Address above which program command-line arguments
426bc8d7
MK
2342.RI ( argv )
2343are placed.
12449ae3 2344.TP
b02b4b74 2345(49) \fIarg_end\fP \ %lu \ (since Linux 3.5) \ [PT]
0be30a54 2346.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
62e4a418 2347Address below program command-line arguments
426bc8d7
MK
2348.RI ( argv )
2349are placed.
12449ae3 2350.TP
b02b4b74 2351(50) \fIenv_start\fP \ %lu \ (since Linux 3.5) \ [PT]
0be30a54 2352.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
62e4a418 2353Address above which program environment is placed.
12449ae3 2354.TP
b02b4b74 2355(51) \fIenv_end\fP \ %lu \ (since Linux 3.5) \ [PT]
0be30a54 2356.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
62e4a418 2357Address below which program environment is placed.
12449ae3 2358.TP
b02b4b74 2359(52) \fIexit_code\fP \ %d \ (since Linux 3.5) \ [PT]
0be30a54 2360.\" commit 5b172087f99189416d5f47fd7ab5e6fb762a9ba3
62e4a418 2361The thread's exit status in the form reported by
426bc8d7 2362.BR waitpid (2).
12449ae3 2363.RE
2364.TP
69119dc7 2365.I /proc/[pid]/statm
59a40ed7 2366Provides information about memory usage, measured in pages.
c13182ef 2367The columns are:
37d5e699 2368.IP
a08ea57c 2369.in +4n
37d5e699 2370.EX
cb42fb56 2371size (1) total program size
69119dc7 2372 (same as VmSize in \fI/proc/[pid]/status\fP)
cb42fb56 2373resident (2) resident set size
69119dc7 2374 (same as VmRSS in \fI/proc/[pid]/status\fP)
4e6fa352
MK
2375shared (3) number of resident shared pages (i.e., backed by a file)
2376 (same as RssFile+RssShmem in \fI/proc/[pid]/status\fP)
cb42fb56 2377text (4) text (code)
59a40ed7 2378.\" (not including libs; broken, includes data segment)
d133b9b3 2379lib (5) library (unused since Linux 2.6; always 0)
cb42fb56 2380data (6) data + stack
59a40ed7 2381.\" (including libs; broken, includes library text)
d133b9b3 2382dt (7) dirty pages (unused since Linux 2.6; always 0)
37d5e699 2383.EE
a08ea57c 2384.in
fea681da 2385.TP
69119dc7 2386.I /proc/[pid]/status
fea681da 2387Provides much of the information in
69119dc7 2388.I /proc/[pid]/stat
fea681da 2389and
69119dc7 2390.I /proc/[pid]/statm
fea681da 2391in a format that's easier for humans to parse.
16b5f7ba 2392Here's an example:
37d5e699 2393.IP
16b5f7ba 2394.in +4n
37d5e699 2395.EX
b43a3b30 2396.RB "$" " cat /proc/$$/status"
16b5f7ba 2397Name: bash
a79343e9 2398Umask: 0022
16b5f7ba 2399State: S (sleeping)
aac0b30f 2400Tgid: 17248
2d2dfb69 2401Ngid: 0
aac0b30f
MK
2402Pid: 17248
2403PPid: 17200
16b5f7ba
MK
2404TracerPid: 0
2405Uid: 1000 1000 1000 1000
2406Gid: 100 100 100 100
2407FDSize: 256
2408Groups: 16 33 100
aac0b30f
MK
2409NStgid: 17248
2410NSpid: 17248
2411NSpgid: 17248
2412NSsid: 17200
06b7cee0
MK
2413VmPeak: 131168 kB
2414VmSize: 131168 kB
2415VmLck: 0 kB
2416VmPin: 0 kB
2417VmHWM: 13484 kB
2418VmRSS: 13484 kB
e546617e
MK
2419RssAnon: 10264 kB
2420RssFile: 3220 kB
2421RssShmem: 0 kB
06b7cee0
MK
2422VmData: 10332 kB
2423VmStk: 136 kB
2424VmExe: 992 kB
2425VmLib: 2104 kB
2426VmPTE: 76 kB
2427VmPMD: 12 kB
2428VmSwap: 0 kB
4084d612 2429HugetlbPages: 0 kB # 4.4
16b5f7ba
MK
2430Threads: 1
2431SigQ: 0/3067
2432SigPnd: 0000000000000000
2433ShdPnd: 0000000000000000
2434SigBlk: 0000000000010000
2435SigIgn: 0000000000384004
2436SigCgt: 000000004b813efb
2437CapInh: 0000000000000000
2438CapPrm: 0000000000000000
2439CapEff: 0000000000000000
2440CapBnd: ffffffffffffffff
6112ea97 2441CapAmb: 0000000000000000
6c0ed873 2442NoNewPrivs: 0
039b6546 2443Seccomp: 0
bf8fc275 2444Speculation_Store_Bypass: vulnerable
16b5f7ba
MK
2445Cpus_allowed: 00000001
2446Cpus_allowed_list: 0
2447Mems_allowed: 1
2448Mems_allowed_list: 0
2449voluntary_ctxt_switches: 150
2450nonvoluntary_ctxt_switches: 545
37d5e699 2451.EE
16b5f7ba
MK
2452.in
2453.IP
2454The fields are as follows:
2455.RS
2456.IP * 2
2457.IR Name :
2458Command run by this process.
2459.IP *
a79343e9 2460.IR Umask :
53473996
MK
2461Process umask, expressed in octal with a leading zero; see
2462.BR umask (2).
a79343e9
MK
2463(Since Linux 4.7.)
2464.IP *
16b5f7ba 2465.IR State :
4175f999
MK
2466Current state of the process.
2467One of
16b5f7ba
MK
2468"R (running)",
2469"S (sleeping)",
2470"D (disk sleep)",
2471"T (stopped)",
2472"T (tracing stop)",
2473"Z (zombie)",
2474or
2475"X (dead)".
2476.IP *
2477.IR Tgid :
2478Thread group ID (i.e., Process ID).
2479.IP *
2d2dfb69
MK
2480.IR Ngid :
2481NUMA group ID (0 if none; since Linux 3.13).
2482.IP *
16b5f7ba
MK
2483.IR Pid :
2484Thread ID (see
2485.BR gettid (2)).
2486.IP *
a1bc91d5
MK
2487.IR PPid :
2488PID of parent process.
2489.IP *
16b5f7ba
MK
2490.IR TracerPid :
2491PID of process tracing this process (0 if not being traced).
2492.IP *
2493.IR Uid ", " Gid :
9ee4a2b6 2494Real, effective, saved set, and filesystem UIDs (GIDs).
16b5f7ba
MK
2495.IP *
2496.IR FDSize :
2497Number of file descriptor slots currently allocated.
2498.IP *
2499.IR Groups :
2500Supplementary group list.
2501.IP *
b84a64f4 2502.IR NStgid :
aac0b30f
MK
2503Thread group ID (i.e., PID) in each of the PID namespaces of which
2504.I [pid]
2505is a member.
2506The leftmost entry shows the value with respect to the PID namespace
0aae4092
KF
2507of the process that mounted this procfs (or the root namespace
2508if mounted by the kernel),
aac0b30f
MK
2509followed by the value in successively nested inner namespaces.
2510.\" commit e4bc33245124db69b74a6d853ac76c2976f472d5
2511(Since Linux 4.1.)
2512.IP *
b84a64f4 2513.IR NSpid :
aac0b30f
MK
2514Thread ID in each of the PID namespaces of which
2515.I [pid]
2516is a member.
2517The fields are ordered as for
2518.IR NStgid .
2519(Since Linux 4.1.)
2520.IP *
ecc9535d 2521.IR NSpgid :
aac0b30f
MK
2522Process group ID in each of the PID namespaces of which
2523.I [pid]
2524is a member.
2525The fields are ordered as for
2526.IR NStgid .
2527(Since Linux 4.1.)
2528.IP *
ecc9535d 2529.IR NSsid :
aac0b30f
MK
2530descendant namespace session ID hierarchy
2531Session ID in each of the PID namespaces of which
2532.I [pid]
2533is a member.
2534The fields are ordered as for
2535.IR NStgid .
2536(Since Linux 4.1.)
2537.IP *
16b5f7ba
MK
2538.IR VmPeak :
2539Peak virtual memory size.
2540.IP *
2541.IR VmSize :
2542Virtual memory size.
2543.IP *
2544.IR VmLck :
fde39195 2545Locked memory size (see
f8bfb68e 2546.BR mlock (2)).
16b5f7ba 2547.IP *
15789039
TY
2548.IR VmPin :
2549Pinned memory size
2550.\" commit bc3e53f682d93df677dbd5006a404722b3adfe18
2551(since Linux 3.2).
2552These are pages that can't be moved because something needs to
2553directly access physical memory.
2554.IP *
16b5f7ba
MK
2555.IR VmHWM :
2556Peak resident set size ("high water mark").
2557.IP *
2558.IR VmRSS :
2559Resident set size.
e546617e
MK
2560Note that the value here is the sum of
2561.IR RssAnon ,
2562.IR RssFile ,
2563and
2564.IR RssShmem .
2565.IP *
2566.IR RssAnon :
2567Size of resident anonymous memory.
2568.\" commit bf9683d6990589390b5178dafe8fd06808869293
2569(since Linux 4.5).
2570.IP *
2571.IR RssFile :
2572Size of resident file mappings.
2573.\" commit bf9683d6990589390b5178dafe8fd06808869293
2574(since Linux 4.5).
2575.IP *
2576.IR RssShmem :
78230722 2577Size of resident shared memory (includes System V shared memory,
4e07c70f
MK
2578mappings from
2579.BR tmpfs (5),
2580and shared anonymous mappings).
e546617e
MK
2581.\" commit bf9683d6990589390b5178dafe8fd06808869293
2582(since Linux 4.5).
16b5f7ba
MK
2583.IP *
2584.IR VmData ", " VmStk ", " VmExe :
2585Size of data, stack, and text segments.
2586.IP *
2587.IR VmLib :
2588Shared library code size.
2589.IP *
2590.IR VmPTE :
2591Page table entries size (since Linux 2.6.10).
2592.IP *
e28af9cd
MK
2593.IR VmPMD :
2594.\" commit dc6c9a35b66b520cf67e05d8ca60ebecad3b0479
73b9cbe1 2595Size of second-level page tables (since Linux 4.0).
e28af9cd 2596.IP *
ac4b0eb3 2597.IR VmSwap :
1ddc1665 2598.\" commit b084d4353ff99d824d3bc5a5c2c22c70b1fba722
fce21149
MK
2599Swapped-out virtual memory size by anonymous private pages;
2600shmem swap usage is not included (since Linux 2.6.34).
49f6dda7 2601.IP *
4084d612
MK
2602.IR HugetlbPages :
2603Size of hugetlb memory portions.
2604.\" commit 5d317b2b6536592a9b51fe65faed43d65ca9158e
2605(since Linux 4.4).
2606.IP *
16b5f7ba
MK
2607.IR Threads :
2608Number of threads in process containing this thread.
2609.IP *
6ee625eb
MK
2610.IR SigQ :
2611This field contains two slash-separated numbers that relate to
2612queued signals for the real user ID of this process.
2613The first of these is the number of currently queued
2614signals for this real user ID, and the second is the
2615resource limit on the number of queued signals for this process
2616(see the description of
2617.BR RLIMIT_SIGPENDING
2618in
2619.BR getrlimit (2)).
2620.IP *
16b5f7ba
MK
2621.IR SigPnd ", " ShdPnd :
2622Number of signals pending for thread and for process as a whole (see
2623.BR pthreads (7)
2624and
2625.BR signal (7)).
2626.IP *
2627.IR SigBlk ", " SigIgn ", " SigCgt :
2628Masks indicating signals being blocked, ignored, and caught (see
2629.BR signal (7)).
2630.IP *
2631.IR CapInh ", " CapPrm ", " CapEff :
2632Masks of capabilities enabled in inheritable, permitted, and effective sets
2633(see
2634.BR capabilities (7)).
2635.IP *
2636.IR CapBnd :
2637Capability Bounding set
7e07d950 2638(since Linux 2.6.26, see
16b5f7ba
MK
2639.BR capabilities (7)).
2640.IP *
6112ea97
MK
2641.IR CapAmb :
2642Ambient capability set
2643(since Linux 4.3, see
2644.BR capabilities (7)).
2645.IP *
6c0ed873
MK
2646.IR NoNewPrivs :
2647.\" commit af884cd4a5ae62fcf5e321fecf0ec1014730353d
2648Value of the
2649.I no_new_privs
2650bit
2651(since Linux 4.10, see
2652.BR prctl (2)).
2653.IP *
039b6546
MK
2654.IR Seccomp :
2655.\" commit 2f4b3bf6b2318cfaa177ec5a802f4d8d6afbd816
2656Seccomp mode of the process
2657(since Linux 3.8, see
2658.BR seccomp (2)).
26590 means
2660.BR SECCOMP_MODE_DISABLED ;
26611 means
2662.BR SECCOMP_MODE_STRICT ;
26632 means
2664.BR SECCOMP_MODE_FILTER .
2665This field is provided only if the kernel was built with the
2666.BR CONFIG_SECCOMP
2667kernel configuration option enabled.
2668.IP *
bf8fc275
NF
2669.IR Speculation_Store_Bypass :
2670.\" commit fae1fa0fc6cca8beee3ab8ed71d54f9a78fa3f64
2671Speculation flaw mitigation state
2672(since Linux 4.17, see
2673.BR prctl (2)).
2674.IP *
16b5f7ba
MK
2675.IR Cpus_allowed :
2676Mask of CPUs on which this process may run
2677(since Linux 2.6.24, see
2678.BR cpuset (7)).
2679.IP *
2680.IR Cpus_allowed_list :
2681Same as previous, but in "list format"
2682(since Linux 2.6.26, see
2683.BR cpuset (7)).
2684.IP *
2685.IR Mems_allowed :
2686Mask of memory nodes allowed to this process
2687(since Linux 2.6.24, see
2688.BR cpuset (7)).
2689.IP *
2690.IR Mems_allowed_list :
2691Same as previous, but in "list format"
2692(since Linux 2.6.26, see
2693.BR cpuset (7)).
2694.IP *
7c82878a 2695.IR voluntary_ctxt_switches ", " nonvoluntary_ctxt_switches :
16b5f7ba
MK
2696Number of voluntary and involuntary context switches (since Linux 2.6.23).
2697.RE
afb7b014
MK
2698.TP
2699.IR /proc/[pid]/syscall " (since Linux 2.6.27)"
2700.\" commit ebcb67341fee34061430f3367f2e507e52ee051b
2701This file exposes the system call number and argument registers for the
2702system call currently being executed by the process,
2703followed by the values of the stack pointer and program counter registers.
2704The values of all six argument registers are exposed,
2705although most system calls use fewer registers.
2dad4c59 2706.IP
afb7b014 2707If the process is blocked, but not in a system call,
1fb61947 2708then the file displays \-1 in place of the system call number,
afb7b014 2709followed by just the values of the stack pointer and program counter.
64fcb6e1 2710If process is not blocked, then the file contains just the string "running".
2dad4c59 2711.IP
afb7b014
MK
2712This file is present only if the kernel was configured with
2713.BR CONFIG_HAVE_ARCH_TRACEHOOK .
2dad4c59 2714.IP
4834ae91
MK
2715Permission to access this file is governed by a ptrace access mode
2716.B PTRACE_MODE_ATTACH_FSCREDS
2717check; see
2718.BR ptrace (2).
fea681da 2719.TP
69119dc7 2720.IR /proc/[pid]/task " (since Linux 2.6.0-test6)"
afcaf646
MK
2721This is a directory that contains one subdirectory
2722for each thread in the process.
69119dc7
MK
2723The name of each subdirectory is the numerical thread ID
2724.RI ( [tid] )
2725of the thread (see
afcaf646
MK
2726.BR gettid (2)).
2727Within each of these subdirectories, there is a set of
2728files with the same names and contents as under the
69119dc7 2729.I /proc/[pid]
afcaf646
MK
2730directories.
2731For attributes that are shared by all threads, the contents for
2732each of the files under the
69119dc7 2733.I task/[tid]
afcaf646 2734subdirectories will be the same as in the corresponding
c13182ef 2735file in the parent
69119dc7 2736.I /proc/[pid]
afcaf646 2737directory
c13182ef 2738(e.g., in a multithreaded process, all of the
69119dc7 2739.I task/[tid]/cwd
c13182ef 2740files will have the same value as the
69119dc7 2741.I /proc/[pid]/cwd
c13182ef 2742file in the parent directory, since all of the threads in a process
afcaf646
MK
2743share a working directory).
2744For attributes that are distinct for each thread,
c13182ef 2745the corresponding files under
69119dc7 2746.I task/[tid]
afcaf646 2747may have different values (e.g., various fields in each of the
69119dc7 2748.I task/[tid]/status
4a40c703
JH
2749files may be different for each thread),
2750.\" in particular: "children" :/
2751or they might not exist in
2752.I /proc/[pid]
2753at all.
afcaf646
MK
2754.\" The following was still true as at kernel 2.6.13
2755In a multithreaded process, the contents of the
69119dc7 2756.I /proc/[pid]/task
c13182ef 2757directory are not available if the main thread has already terminated
afcaf646
MK
2758(typically by calling
2759.BR pthread_exit (3)).
2dad4c59 2760.IP
4a40c703
JH
2761.TP
2762.IR /proc/[pid]/task/[tid]/children " (since Linux 3.5)"
2763.\" commit 818411616baf46ceba0cff6f05af3a9b294734f7
2764A space-separated list of child tasks of this task.
2765Each child task is represented by its TID.
2dad4c59 2766.IP
4a40c703 2767.\" see comments in get_children_pid() in fs/proc/array.c
45dd5092
MK
2768This option is intended for use by the checkpoint-restore (CRIU) system,
2769and reliably provides a list of children only if all of the child processes
2770are stopped or frozen.
2771It does not work properly if children of the target task exit while
4a40c703 2772the file is being read!
45dd5092 2773Exiting children may cause non-exiting children to be omitted from the list.
4a40c703 2774This makes this interface even more unreliable than classic PID-based
45dd5092
MK
2775approaches if the inspected task and its children aren't frozen,
2776and most code should probably not use this interface.
2dad4c59 2777.IP
7ded2db4
MK
2778Until Linux 4.2, the presence of this file was governed by the
2779.B CONFIG_CHECKPOINT_RESTORE
2780kernel configuration option.
2781Since Linux 4.2,
2782.\" commit 2e13ba54a2682eea24918b87ad3edf70c2cf085b
ae34c521 2783it is governed by the
7ded2db4
MK
2784.B CONFIG_PROC_CHILDREN
2785option.
afcaf646 2786.TP
1509ca0e
MK
2787.IR /proc/[pid]/timers " (since Linux 3.10)"
2788.\" commit 5ed67f05f66c41e39880a6d61358438a25f9fee5
2789.\" commit 48f6a7a511ef8823fdff39afee0320092d43a8a0
2790A list of the POSIX timers for this process.
93691c1e 2791Each timer is listed with a line that starts with the string "ID:".
1509ca0e 2792For example:
2dad4c59 2793.IP
1509ca0e 2794.in +4n
37d5e699 2795.EX
1509ca0e
MK
2796ID: 1
2797signal: 60/00007fff86e452a8
2798notify: signal/pid.2634
2799ClockID: 0
2800ID: 0
2801signal: 60/00007fff86e452a8
2802notify: signal/pid.2634
2803ClockID: 1
37d5e699 2804.EE
1509ca0e 2805.in
2dad4c59 2806.IP
1509ca0e
MK
2807The lines shown for each timer have the following meanings:
2808.RS
2809.TP
2810.I ID
2811The ID for this timer.
2812This is not the same as the timer ID returned by
2813.BR timer_create (2);
2814rather, it is the same kernel-internal ID that is available via the
2815.I si_timerid
2816field of the
2817.IR siginfo_t
2818structure (see
2819.BR sigaction (2)).
2820.TP
2821.I signal
2822This is the signal number that this timer uses to deliver notifications
2823followed by a slash, and then the
7f1ea8fb 2824.I sigev_value
1509ca0e
MK
2825value supplied to the signal handler.
2826Valid only for timers that notify via a signal.
2827.TP
2828.I notify
2829The part before the slash specifies the mechanism
2830that this timer uses to deliver notifications,
2831and is one of "thread", "signal", or "none".
2832Immediately following the slash is either the string "tid" for timers
2833with
2834.B SIGEV_THREAD_ID
2835notification, or "pid" for timers that notify by other mechanisms.
dbe6f88b
MK
2836Following the "." is the PID of the process
2837(or the kernel thread ID of the thread) that will be delivered
1509ca0e
MK
2838a signal if the timer delivers notifications via a signal.
2839.TP
2840.I ClockID
2841This field identifies the clock that the timer uses for measuring time.
2842For most clocks, this is a number that matches one of the user-space
2843.BR CLOCK_*
9d54c087 2844constants exposed via
1509ca0e
MK
2845.IR <time.h> .
2846.B CLOCK_PROCESS_CPUTIME_ID
9bc87ed0 2847timers display with a value of \-6
1509ca0e
MK
2848in this field.
2849.B CLOCK_THREAD_CPUTIME_ID
9bc87ed0 2850timers display with a value of \-2
1509ca0e
MK
2851in this field.
2852.RE
5734da6d
MK
2853.IP
2854This file is available only when the kernel was configured with
2855.BR CONFIG_CHECKPOINT_RESTORE .
1509ca0e 2856.TP
11f60142
MK
2857.IR /proc/[pid]/timerslack_ns " (since Linux 4.6)"
2858.\" commit da8b44d5a9f8bf26da637b7336508ca534d6b319
2859.\" commit 5de23d435e88996b1efe0e2cebe242074ce67c9e
2860This file exposes the process's "current" timer slack value,
2861expressed in nanoseconds.
2862The file is writable,
2863allowing the process's timer slack value to be changed.
2864Writing 0 to this file resets the "current" timer slack to the
2865"default" timer slack value.
2866For further details, see the discussion of
2867.BR PR_SET_TIMERSLACK
2868in
2869.BR prctl (2).
2dad4c59 2870.IP
5daae264
MK
2871Initially,
2872permission to access this file was governed by a ptrace access mode
a62e0e01 2873.B PTRACE_MODE_ATTACH_FSCREDS
5daae264
MK
2874check (see
2875.BR ptrace (2)).
2876However, this was subsequently deemed too strict a requirement
2877(and had the side effect that requiring a process to have the
2878.B CAP_SYS_PTRACE
2879capability would also allow it to view and change any process's memory).
2880Therefore, since Linux 4.9,
2881.\" commit 7abbaf94049914f074306d960b0f968ffe52e59f
2882only the (weaker)
2883.B CAP_SYS_NICE
2884capability is required to access this file.
11f60142 2885.TP
b1aad373
MK
2886.IR /proc/[pid]/uid_map ", " /proc/[pid]/gid_map " (since Linux 3.5)"
2887See
2888.BR user_namespaces (7).
2889.TP
2890.IR /proc/[pid]/wchan " (since Linux 2.6.0)"
2891The symbolic name corresponding to the location
2892in the kernel where the process is sleeping.
2dad4c59 2893.IP
82664739
MK
2894Permission to access this file is governed by a ptrace access mode
2895.B PTRACE_MODE_READ_FSCREDS
2896check; see
2897.BR ptrace (2).
b1aad373 2898.TP
01df7b70
MK
2899.IR /proc/[tid]
2900There is a numerical subdirectory for each running thread
2901that is not a thread group leader
2902(i.e., a thread whose thread ID is not the same as its process ID);
2903the subdirectory is named by the thread ID.
2904Each one of these subdirectories contains files and subdirectories
2905exposing information about the thread with the thread ID
2906.IR tid .
2907The contents of these directories are the same as the corresponding
2908.IR /proc/self/task/[tid]
2909directories.
2910.IP
2911The
2912.I /proc/[tid]
2913subdirectories are
2914.I not
2915visible when iterating through
2916.I /proc
2917with
2918.BR getdents (2)
2919(and thus are
2920.I not
2921visible when one uses
2922.BR ls (1)
2923to view the contents of
2924.IR /proc ).
2925.TP
b1aad373
MK
2926.I /proc/apm
2927Advanced power management version and battery information when
2928.B CONFIG_APM
2929is defined at kernel compilation time.
2930.TP
2931.I /proc/buddyinfo
2932This file contains information which is used for diagnosing memory
2933fragmentation issues.
2934Each line starts with the identification of the node and the name
2935of the zone which together identify a memory region
2936This is then
2937followed by the count of available chunks of a certain order in
2938which these zones are split.
2939The size in bytes of a certain order is given by the formula:
2dad4c59 2940.IP
b1aad373 2941 (2^order)\ *\ PAGE_SIZE
2dad4c59 2942.IP
b1aad373
MK
2943The binary buddy allocator algorithm inside the kernel will split
2944one chunk into two chunks of a smaller order (thus with half the
2945size) or combine two contiguous chunks into one larger chunk of
2946a higher order (thus with double the size) to satisfy allocation
2947requests and to counter memory fragmentation.
2948The order matches the column number, when starting to count at zero.
2dad4c59 2949.IP
b5b0d21e 2950For example on an x86-64 system:
2dad4c59 2951.IP
b1aad373 2952.in -12n
37d5e699 2953.EX
b1aad373
MK
2954Node 0, zone DMA 1 1 1 0 2 1 1 0 1 1 3
2955Node 0, zone DMA32 65 47 4 81 52 28 13 10 5 1 404
2956Node 0, zone Normal 216 55 189 101 84 38 37 27 5 3 587
37d5e699 2957.EE
b1aad373 2958.in
2dad4c59 2959.IP
b1aad373
MK
2960In this example, there is one node containing three zones and there
2961are 11 different chunk sizes.
2962If the page size is 4 kilobytes, then the first zone called
2963.I DMA
2964(on x86 the first 16 megabyte of memory) has 1 chunk of 4 kilobytes
2965(order 0) available and has 3 chunks of 4 megabytes (order 10) available.
2dad4c59 2966.IP
b1aad373
MK
2967If the memory is heavily fragmented, the counters for higher
2968order chunks will be zero and allocation of large contiguous areas
2969will fail.
2dad4c59 2970.IP
b1aad373
MK
2971Further information about the zones can be found in
2972.IR /proc/zoneinfo .
2973.TP
2974.I /proc/bus
2975Contains subdirectories for installed busses.
2976.TP
2977.I /proc/bus/pccard
2978Subdirectory for PCMCIA devices when
2979.B CONFIG_PCMCIA
2980is set at kernel compilation time.
2981.TP
fea681da
MK
2982.I /proc/bus/pccard/drivers
2983.TP
2984.I /proc/bus/pci
c13182ef 2985Contains various bus subdirectories and pseudo-files containing
59a40ed7 2986information about PCI busses, installed devices, and device
c13182ef
MK
2987drivers.
2988Some of these files are not ASCII.
fea681da
MK
2989.TP
2990.I /proc/bus/pci/devices
59a40ed7 2991Information about PCI devices.
c13182ef 2992They may be accessed through
fea681da
MK
2993.BR lspci (8)
2994and
2995.BR setpci (8).
2996.TP
12b23dfe
MK
2997.IR /proc/cgroups " (since Linux 2.6.24)"
2998See
2999.BR cgroups (7).
3000.TP
fea681da 3001.I /proc/cmdline
c13182ef
MK
3002Arguments passed to the Linux kernel at boot time.
3003Often done via a boot manager such as
59a40ed7
MK
3004.BR lilo (8)
3005or
3006.BR grub (8).
f6e524c4
MK
3007.TP
3008.IR /proc/config.gz " (since Linux 2.6)"
3009This file exposes the configuration options that were used
c3d9780d 3010to build the currently running kernel,
f6e524c4
MK
3011in the same format as they would be shown in the
3012.I .config
3013file that resulted when configuring the kernel (using
3014.IR "make xconfig" ,
3015.IR "make config" ,
3016or similar).
3017The file contents are compressed; view or search them using
f78ed33a
MK
3018.BR zcat (1)
3019and
3020.BR zgrep (1).
f6e524c4 3021As long as no changes have been made to the following file,
250e01ec
MK
3022the contents of
3023.I /proc/config.gz
37d5e699
MK
3024are the same as those provided by:
3025.IP
f6e524c4 3026.in +4n
37d5e699 3027.EX
c3074d70 3028cat /lib/modules/$(uname \-r)/build/.config
37d5e699 3029.EE
f6e524c4 3030.in
250e01ec
MK
3031.IP
3032.I /proc/config.gz
90878f7c 3033is provided only if the kernel is configured with
250e01ec 3034.BR CONFIG_IKCONFIG_PROC .
fea681da 3035.TP
577c0e20
MK
3036.I /proc/crypto
3037A list of the ciphers provided by the kernel crypto API.
3038For details, see the kernel
3039.I "Linux Kernel Crypto API"
3040documentation available under the kernel source directory
e94de168
ES
3041.I Documentation/crypto/
3042.\" commit 3b72c814a8e8cd638e1ba0da4dfce501e9dff5af
3043(or
3044.I Documentation/DocBook
3045before 4.10;
3046the documentation can be built using a command such as
577c0e20 3047.IR "make htmldocs"
e94de168 3048in the root directory of the kernel source tree).
577c0e20 3049.TP
fea681da
MK
3050.I /proc/cpuinfo
3051This is a collection of CPU and system architecture dependent items,
3052for each supported architecture a different list.
3053Two common entries are \fIprocessor\fP which gives CPU number and
c13182ef
MK
3054\fIbogomips\fP; a system constant that is calculated
3055during kernel initialization.
3056SMP machines have information for
fea681da 3057each CPU.
a091f002
MK
3058The
3059.BR lscpu (1)
3060command gathers its information from this file.
fea681da
MK
3061.TP
3062.I /proc/devices
c13182ef
MK
3063Text listing of major numbers and device groups.
3064This can be used by MAKEDEV scripts for consistency with the kernel.
fea681da
MK
3065.TP
3066.IR /proc/diskstats " (since Linux 2.5.69)"
3067This file contains disk I/O statistics for each disk device.
66a9882e 3068See the Linux kernel source file
fea681da
MK
3069.I Documentation/iostats.txt
3070for further information.
3071.TP
3072.I /proc/dma
c13182ef 3073This is a list of the registered \fIISA\fP DMA (direct memory access)
fea681da
MK
3074channels in use.
3075.TP
3076.I /proc/driver
3077Empty subdirectory.
3078.TP
3079.I /proc/execdomains
3080List of the execution domains (ABI personalities).
3081.TP
3082.I /proc/fb
097585ed
MK
3083Frame buffer information when
3084.B CONFIG_FB
3085is defined during kernel compilation.
fea681da
MK
3086.TP
3087.I /proc/filesystems
9ee4a2b6
MK
3088A text listing of the filesystems which are supported by the kernel,
3089namely filesystems which were compiled into the kernel or whose kernel
6387216b
MK
3090modules are currently loaded.
3091(See also
fb477da2 3092.BR filesystems (5).)
9ee4a2b6 3093If a filesystem is marked with "nodev",
809d0164 3094this means that it does not require a block device to be mounted
9ee4a2b6 3095(e.g., virtual filesystem, network filesystem).
2dad4c59 3096.IP
809d0164
MK
3097Incidentally, this file may be used by
3098.BR mount (8)
9ee4a2b6
MK
3099when no filesystem is specified and it didn't manage to determine the
3100filesystem type.
3101Then filesystems contained in this file are tried
809d0164 3102(excepted those that are marked with "nodev").
fea681da
MK
3103.TP
3104.I /proc/fs
df352acc 3105.\" FIXME Much more needs to be said about /proc/fs
91085d85 3106.\"
df352acc
MK
3107Contains subdirectories that in turn contain files
3108with information about (certain) mounted filesystems.
fea681da
MK
3109.TP
3110.I /proc/ide
3111This directory
59a40ed7
MK
3112exists on systems with the IDE bus.
3113There are directories for each IDE channel and attached device.
c13182ef 3114Files include:
2dad4c59 3115.IP
a08ea57c 3116.in +4n
37d5e699 3117.EX
fea681da
MK
3118cache buffer size in KB
3119capacity number of sectors
3120driver driver version
3121geometry physical and logical geometry
9fdfa163 3122identify in hexadecimal
fea681da
MK
3123media media type
3124model manufacturer's model number
3125settings drive settings
9fdfa163
MK
3126smart_thresholds in hexadecimal
3127smart_values in hexadecimal
37d5e699 3128.EE
a08ea57c 3129.in
2dad4c59 3130.IP
c13182ef 3131The
fea681da
MK
3132.BR hdparm (8)
3133utility provides access to this information in a friendly format.
3134.TP
3135.I /proc/interrupts
23ec6ff0
MK
3136This is used to record the number of interrupts per CPU per IO device.
3137Since Linux 2.6.24,
9ea5bc66 3138for the i386 and x86-64 architectures, at least, this also includes
23ec6ff0
MK
3139interrupts internal to the system (that is, not associated with a device
3140as such), such as NMI (nonmaskable interrupt), LOC (local timer interrupt),
3141and for SMP systems, TLB (TLB flush interrupt), RES (rescheduling
3142interrupt), CAL (remote function call interrupt), and possibly others.
3143Very easy to read formatting, done in ASCII.
fea681da
MK
3144.TP
3145.I /proc/iomem
3146I/O memory map in Linux 2.4.
3147.TP
3148.I /proc/ioports
c13182ef 3149This is a list of currently registered Input-Output port regions that
fea681da
MK
3150are in use.
3151.TP
3152.IR /proc/kallsyms " (since Linux 2.5.71)"
3153This holds the kernel exported symbol definitions used by the
3154.BR modules (X)
3155tools to dynamically link and bind loadable modules.
3156In Linux 2.5.47 and earlier, a similar file with slightly different syntax
3157was named
3158.IR ksyms .
3159.TP
3160.I /proc/kcore
3161This file represents the physical memory of the system and is stored
c13182ef
MK
3162in the ELF core file format.
3163With this pseudo-file, and an unstripped
9a67332e
MK
3164kernel
3165.RI ( /usr/src/linux/vmlinux )
3166binary, GDB can be used to
fea681da 3167examine the current state of any kernel data structures.
2dad4c59 3168.IP
fea681da 3169The total length of the file is the size of physical memory (RAM) plus
ee8655b5 31704\ KiB.
fea681da 3171.TP
653836fb
MK
3172.IR /proc/keys " (since Linux 2.6.10)"
3173See
3174.BR keyrings (7).
3175.TP
3176.IR /proc/key-users " (since Linux 2.6.10)"
3177See
3178.BR keyrings (7).
3179.TP
fea681da
MK
3180.I /proc/kmsg
3181This file can be used instead of the
3182.BR syslog (2)
c13182ef
MK
3183system call to read kernel messages.
3184A process must have superuser
fea681da 3185privileges to read this file, and only one process should read this
c13182ef
MK
3186file.
3187This file should not be read if a syslog process is running
fea681da
MK
3188which uses the
3189.BR syslog (2)
3190system call facility to log kernel messages.
2dad4c59 3191.IP
fea681da 3192Information in this file is retrieved with the
c4517613 3193.BR dmesg (1)
fea681da
MK
3194program.
3195.TP
55d68a94 3196.IR /proc/kpagecgroup " (since Linux 4.3)"
0e462d71 3197.\" commit 80ae2fdceba8313b0433f899bdd9c6c463291a17
55d68a94
OE
3198This file contains a 64-bit inode number of
3199the memory cgroup each page is charged to,
3200indexed by page frame number (see the discussion of
3201.IR /proc/[pid]/pagemap ).
3202.IP
3203The
3204.IR /proc/kpagecgroup
3205file is present only if the
3206.B CONFIG_MEMCG
3207kernel configuration option is enabled.
3208.TP
ff56ac8b
MK
3209.IR /proc/kpagecount " (since Linux 2.6.25)"
3210This file contains a 64-bit count of the number of
3211times each physical page frame is mapped,
3212indexed by page frame number (see the discussion of
3213.IR /proc/[pid]/pagemap ).
3214.IP
3215The
3216.IR /proc/kpagecount
3217file is present only if the
3218.B CONFIG_PROC_PAGE_MONITOR
59d566a9
MK
3219kernel configuration option is enabled.
3220.TP
3221.IR /proc/kpageflags " (since Linux 2.6.25)"
ef4f4031 3222This file contains 64-bit masks corresponding to each physical page frame;
59d566a9
MK
3223it is indexed by page frame number (see the discussion of
3224.IR /proc/[pid]/pagemap ).
3225The bits are as follows:
2dad4c59 3226.IP
59d566a9
MK
3227 0 - KPF_LOCKED
3228 1 - KPF_ERROR
3229 2 - KPF_REFERENCED
3230 3 - KPF_UPTODATE
3231 4 - KPF_DIRTY
3232 5 - KPF_LRU
3233 6 - KPF_ACTIVE
3234 7 - KPF_SLAB
3235 8 - KPF_WRITEBACK
3236 9 - KPF_RECLAIM
3237 10 - KPF_BUDDY
3238 11 - KPF_MMAP (since Linux 2.6.31)
3239 12 - KPF_ANON (since Linux 2.6.31)
3240 13 - KPF_SWAPCACHE (since Linux 2.6.31)
3241 14 - KPF_SWAPBACKED (since Linux 2.6.31)
3242 15 - KPF_COMPOUND_HEAD (since Linux 2.6.31)
3243 16 - KPF_COMPOUND_TAIL (since Linux 2.6.31)
d0ffc687 3244 17 - KPF_HUGE (since Linux 2.6.31)
59d566a9
MK
3245 18 - KPF_UNEVICTABLE (since Linux 2.6.31)
3246 19 - KPF_HWPOISON (since Linux 2.6.31)
3247 20 - KPF_NOPAGE (since Linux 2.6.31)
3248 21 - KPF_KSM (since Linux 2.6.32)
3249 22 - KPF_THP (since Linux 3.4)
5487da4c
MK
3250 23 - KPF_BALLOON (since Linux 3.18)
3251.\" KPF_BALLOON: commit 09316c09dde33aae14f34489d9e3d243ec0d5938
f38dfdf1 3252 24 - KPF_ZERO_PAGE (since Linux 4.0)
c6f182bc 3253.\" KPF_ZERO_PAGE: commit 56873f43abdcd574b25105867a990f067747b2f4
f38dfdf1 3254 25 - KPF_IDLE (since Linux 4.3)
c6f182bc 3255.\" KPF_IDLE: commit f074a8f49eb87cde95ac9d040ad5e7ea4f029738
2dad4c59 3256.IP
59d566a9
MK
3257For further details on the meanings of these bits,
3258see the kernel source file
3259.IR Documentation/vm/pagemap.txt .
3260Before kernel 2.6.29,
3261.\" commit ad3bdefe877afb47480418fdb05ecd42842de65e
3262.\" commit e07a4b9217d1e97d2f3a62b6b070efdc61212110
3263.BR KPF_WRITEBACK ,
3264.BR KPF_RECLAIM ,
3265.BR KPF_BUDDY ,
3266and
3267.BR KPF_LOCKED
3268did not report correctly.
3269.IP
3270The
3271.IR /proc/kpageflags
3272file is present only if the
3273.B CONFIG_PROC_PAGE_MONITOR
ff56ac8b
MK
3274kernel configuration option is enabled.
3275.TP
93f18cbb 3276.IR /proc/ksyms " (Linux 1.1.23\(en2.5.47)"
fea681da
MK
3277See
3278.IR /proc/kallsyms .
3279.TP
3280.I /proc/loadavg
6b05dc38
MK
3281The first three fields in this file are load average figures
3282giving the number of jobs in the run queue (state R)
fea681da
MK
3283or waiting for disk I/O (state D) averaged over 1, 5, and 15 minutes.
3284They are the same as the load average numbers given by
3285.BR uptime (1)
3286and other programs.
6b05dc38 3287The fourth field consists of two numbers separated by a slash (/).
78fc91ec
EDB
3288The first of these is the number of currently runnable kernel
3289scheduling entities (processes, threads).
6b05dc38
MK
3290The value after the slash is the number of kernel scheduling entities
3291that currently exist on the system.
3292The fifth field is the PID of the process that was most
3293recently created on the system.
fea681da
MK
3294.TP
3295.I /proc/locks
3296This file shows current file locks
3297.RB ( flock "(2) and " fcntl (2))
3298and leases
3299.RB ( fcntl (2)).
f352b560
MK
3300.IP
3301An example of the content shown in this file is the following:
3302.IP
3303.in +4n
3304.EX
33051: POSIX ADVISORY READ 5433 08:01:7864448 128 128
33062: FLOCK ADVISORY WRITE 2001 08:01:7864554 0 EOF
33073: FLOCK ADVISORY WRITE 1568 00:2f:32388 0 EOF
33084: POSIX ADVISORY WRITE 699 00:16:28457 0 EOF
33095: POSIX ADVISORY WRITE 764 00:16:21448 0 0
33106: POSIX ADVISORY READ 3548 08:01:7867240 1 1
33117: POSIX ADVISORY READ 3548 08:01:7865567 1826 2335
33128: OFDLCK ADVISORY WRITE -1 08:01:8713209 128 191
3313.EE
3314.in
3315.IP
3316The fields shown in each line are as follows:
3317.RS
3318.IP (1) 4
3319The ordinal position of the lock in the list.
3320.IP (2)
3321The lock type.
3322Values that may appear here include:
3323.RS
3324.TP
3325.B FLOCK
3326This is a BSD file lock created using
3327.BR flock (2).
3328.TP
3329.B OFDLCK
3330This is an open file description (OFD) lock created using
3331.BR fcntl (2).
3332.TP
3333.B POSIX
3334This is a POSIX byte-range lock created using
3335.BR fcntl (2).
3336.RE
3337.IP (3)
3338Among the strings that can appear here are the following:
3339.RS
3340.TP
3341.B ADVISORY
3342This is an advisory lock.
3343.TP
3344.B MANDATORY
3345This is a mandatory lock.
3346.RE
3347.IP (4)
3348The type of lock.
3349Values that can appear here are:
3350.RS
3351.TP
3352.B READ
3353This is a POSIX or OFD read lock, or a BSD shared lock.
3354.TP
3355.B WRITE
3356This is a POSIX or OFD write lock, or a BSD exclusive lock.
3357.RE
3358.IP (5)
3359The PID of the process that owns the lock.
3360.IP
3361Because OFD locks are not owned by a single process
3362(since multiple processes may have file descriptors that
3363refer to the same open file description),
3364the value \-1 is displayed in this field for OFD locks.
3365(Before kernel 4.14,
52f842a5 3366.\" commit 9d5b86ac13c573795525ecac6ed2db39ab23e2a8
f352b560
MK
3367a bug meant that the PID of the process that
3368initially acquired the lock was displayed instead of the value \-1.)
3369.IP (6)
3370Three colon-separated subfields that identify the major and minor device
3371ID of the device containing the filesystem where the locked file resides,
3372followed by the inode number of the locked file.
3373.IP (7)
3374The byte offset of the first byte of the lock.
3375For BSD locks, this value is always 0.
3376.IP (8)
3377The byte offset of the last byte of the lock.
3378.B EOF
3379in this field means that the lock extends to the end of the file.
3380For BSD locks, the value shown is always
3381.IR EOF .
3382.RE
3383.IP
8fb9b45a
MK
3384Since Linux 4.9,
3385.\" commit d67fd44f697dff293d7cdc29af929241b669affe
3386the list of locks shown in
3387.I /proc/locks
3388is filtered to show just the locks for the processes in the PID
3389namespace (see
3390.BR pid_namespaces (7))
3391for which the
3392.I /proc
3393filesystem was mounted.
1dbe854b 3394(In the initial PID namespace,
8fb9b45a
MK
3395there is no filtering of the records shown in this file.)
3396.IP
9f1002a1
MK
3397The
3398.BR lslocks (8)
3399command provides a bit more information about each lock.
fea681da 3400.TP
89dd5f8a 3401.IR /proc/malloc " (only up to and including Linux 2.2)"
59a40ed7 3402.\" It looks like this only ever did something back in 1.0 days
90878f7c 3403This file is present only if
89dd5f8a 3404.B CONFIG_DEBUG_MALLOC
097585ed 3405was defined during compilation.
fea681da
MK
3406.TP
3407.I /proc/meminfo
77b802ec
MK
3408This file reports statistics about memory usage on the system.
3409It is used by
fea681da
MK
3410.BR free (1)
3411to report the amount of free and used memory (both physical and swap)
3412on the system as well as the shared memory and buffers used by the
3413kernel.
3ba3d5b1
MK
3414Each line of the file consists of a parameter name, followed by a colon,
3415the value of the parameter, and an option unit of measurement (e.g., "kB").
3416The list below describes the parameter names and
3417the format specifier required to read the field value.
3418Except as noted below,
3419all of the fields have been present since at least Linux 2.6.0.
86cf87d7 3420Some fields are displayed only if the kernel was configured
3ba3d5b1
MK
3421with various options; those dependencies are noted in the list.
3422.RS
3423.TP
3424.IR MemTotal " %lu"
449dd4e2 3425Total usable RAM (i.e., physical RAM minus a few reserved
99e91586 3426bits and the kernel binary code).
3ba3d5b1
MK
3427.TP
3428.IR MemFree " %lu"
7bccb7d4
DP
3429The sum of
3430.IR LowFree + HighFree .
3ba3d5b1 3431.TP
8b4b1f68
MK
3432.IR MemAvailable " %lu (since Linux 3.14)"
3433An estimate of how much memory is available for starting new
3434applications, without swapping.
3435.TP
3ba3d5b1 3436.IR Buffers " %lu"
99e91586 3437Relatively temporary storage for raw disk blocks that
3ba3d5b1
MK
3438shouldn't get tremendously large (20MB or so).
3439.TP
3440.IR Cached " %lu"
3441In-memory cache for files read from the disk (the page cache).
3442Doesn't include
3443.IR SwapCached .
3444.TP
3445.IR SwapCached " %lu"
3446Memory that once was swapped out, is swapped back in but
3447still also is in the swap file.
fa1d2749 3448(If memory pressure is high, these pages
3ba3d5b1 3449don't need to be swapped out again because they are already
99e91586 3450in the swap file.
3ba3d5b1
MK
3451This saves I/O.)
3452.TP
3453.IR Active " %lu"
3454Memory that has been used more recently and usually not
3455reclaimed unless absolutely necessary.
3456.TP
3457.IR Inactive " %lu"
3458Memory which has been less recently used.
3459It is more eligible to be reclaimed for other purposes.
3460.TP
3461.IR Active(anon) " %lu (since Linux 2.6.28)"
3462[To be documented.]
3463.TP
3464.IR Inactive(anon) " %lu (since Linux 2.6.28)"
3465[To be documented.]
3466.TP
3467.IR Active(file) " %lu (since Linux 2.6.28)"
3468[To be documented.]
3469.TP
3470.IR Inactive(file) " %lu (since Linux 2.6.28)"
3471[To be documented.]
3472.TP
3473.IR Unevictable " %lu (since Linux 2.6.28)"
3474(From Linux 2.6.28 to 2.6.30,
3475\fBCONFIG_UNEVICTABLE_LRU\fP was required.)
3476[To be documented.]
3477.TP
46fbfc07 3478.IR Mlocked " %lu (since Linux 2.6.28)"
3ba3d5b1
MK
3479(From Linux 2.6.28 to 2.6.30,
3480\fBCONFIG_UNEVICTABLE_LRU\fP was required.)
3481[To be documented.]
3482.TP
3483.IR HighTotal " %lu"
3484(Starting with Linux 2.6.19, \fBCONFIG_HIGHMEM\fP is required.)
3485Total amount of highmem.
99e91586 3486Highmem is all memory above ~860MB of physical memory.
3ba3d5b1
MK
3487Highmem areas are for use by user-space programs,
3488or for the page cache.
3489The kernel must use tricks to access
3490this memory, making it slower to access than lowmem.
3491.TP
3492.IR HighFree " %lu
3493(Starting with Linux 2.6.19, \fBCONFIG_HIGHMEM\fP is required.)
3494Amount of free highmem.
3495.TP
3496.IR LowTotal " %lu
3497(Starting with Linux 2.6.19, \fBCONFIG_HIGHMEM\fP is required.)
3498Total amount of lowmem.
3499Lowmem is memory which can be used for everything that
3500highmem can be used for, but it is also available for the
3501kernel's use for its own data structures.
3502Among many other things,
99e91586 3503it is where everything from
7bccb7d4
DP
3504.I Slab
3505is allocated.
3ba3d5b1
MK
3506Bad things happen when you're out of lowmem.
3507.TP
3508.IR LowFree " %lu
3509(Starting with Linux 2.6.19, \fBCONFIG_HIGHMEM\fP is required.)
3510Amount of free lowmem.
3511.TP
3512.IR MmapCopy " %lu (since Linux 2.6.29)"
99e91586
DP
3513.RB ( CONFIG_MMU
3514is required.)
3ba3d5b1
MK
3515[To be documented.]
3516.TP
3517.IR SwapTotal " %lu"
3518Total amount of swap space available.
3519.TP
3520.IR SwapFree " %lu"
c16d4f25 3521Amount of swap space that is currently unused.
3ba3d5b1
MK
3522.TP
3523.IR Dirty " %lu"
3524Memory which is waiting to get written back to the disk.
3525.TP
3526.IR Writeback " %lu"
3527Memory which is actively being written back to the disk.
3528.TP
3529.IR AnonPages " %lu (since Linux 2.6.18)"
3530Non-file backed pages mapped into user-space page tables.
3531.TP
3532.IR Mapped " %lu"
fda70f5b
MK
3533Files which have been mapped into memory (with
3534.BR mmap (2)),
3535such as libraries.
3ba3d5b1
MK
3536.TP
3537.IR Shmem " %lu (since Linux 2.6.32)"
eb775c04
MK
3538Amount of memory consumed in
3539.BR tmpfs (5)
3540filesystems.
3ba3d5b1 3541.TP
7375eaab
MK
3542.IR KReclaimable " %lu (since Linux 4.20)"
3543Kernel allocations that the kernel will attempt to reclaim
3544under memory pressure.
3545Includes
3546.I SReclaimable
3547(below), and other direct allocations with a shrinker.
3548.TP
3ba3d5b1
MK
3549.IR Slab " %lu"
3550In-kernel data structures cache.
5a5bde70
MK
3551(See
3552.BR slabinfo (5).)
3ba3d5b1
MK
3553.TP
3554.IR SReclaimable " %lu (since Linux 2.6.19)"
7bccb7d4
DP
3555Part of
3556.IR Slab ,
3557that might be reclaimed, such as caches.
3ba3d5b1
MK
3558.TP
3559.IR SUnreclaim " %lu (since Linux 2.6.19)"
7bccb7d4
DP
3560Part of
3561.IR Slab ,
3562that cannot be reclaimed on memory pressure.
3ba3d5b1
MK
3563.TP
3564.IR KernelStack " %lu (since Linux 2.6.32)"
3565Amount of memory allocated to kernel stacks.
3566.TP
3567.IR PageTables " %lu (since Linux 2.6.18)"
3568Amount of memory dedicated to the lowest level of page tables.
3569.TP
3570.IR Quicklists " %lu (since Linux 2.6.27)"
3571(\fBCONFIG_QUICKLIST\fP is required.)
3572[To be documented.]
3573.TP
3574.IR NFS_Unstable " %lu (since Linux 2.6.18)"
3575NFS pages sent to the server, but not yet committed to stable storage.
3576.TP
3577.IR Bounce " %lu (since Linux 2.6.18)"
3578Memory used for block device "bounce buffers".
3579.TP
3580.IR WritebackTmp " %lu (since Linux 2.6.26)"
3581Memory used by FUSE for temporary writeback buffers.
3582.TP
3583.IR CommitLimit " %lu (since Linux 2.6.10)"
cd7b6c40
MK
3584This is the total amount of memory currently available to
3585be allocated on the system, expressed in kilobytes.
90878f7c
MK
3586This limit is adhered to
3587only if strict overcommit accounting is enabled (mode 2 in
cd7b6c40
MK
3588.IR /proc/sys/vm/overcommit_memory ).
3589The limit is calculated according to the formula described under
3590.IR /proc/sys/vm/overcommit_memory .
3591For further details, see the kernel source file
3ba3d5b1
MK
3592.IR Documentation/vm/overcommit-accounting .
3593.TP
3594.IR Committed_AS " %lu"
3595The amount of memory presently allocated on the system.
3596The committed memory is a sum of all of the memory which
3597has been allocated by processes, even if it has not been
3598"used" by them as of yet.
3599A process which allocates 1GB of memory (using
3600.BR malloc (3)
33a0ccb2 3601or similar), but touches only 300MB of that memory will show up
90878f7c 3602as using only 300MB of memory even if it has the address space
3ba3d5b1 3603allocated for the entire 1GB.
2dad4c59 3604.IP
3ba3d5b1
MK
3605This 1GB is memory which has been "committed" to by the VM
3606and can be used at any time by the allocating application.
cd7b6c40 3607With strict overcommit enabled on the system (mode 2 in
d9e0f03d 3608.IR /proc/sys/vm/overcommit_memory ),
3ba3d5b1
MK
3609allocations which would exceed the
3610.I CommitLimit
cd7b6c40 3611will not be permitted.
3ba3d5b1
MK
3612This is useful if one needs to guarantee that processes will not
3613fail due to lack of memory once that memory has been successfully allocated.
3614.TP
3615.IR VmallocTotal " %lu"
3616Total size of vmalloc memory area.
3617.TP
3618.IR VmallocUsed " %lu"
3619Amount of vmalloc area which is used.
3620.TP
3621.IR VmallocChunk " %lu"
3622Largest contiguous block of vmalloc area which is free.
3623.TP
3624.IR HardwareCorrupted " %lu (since Linux 2.6.32)"
3625(\fBCONFIG_MEMORY_FAILURE\fP is required.)
3626[To be documented.]
3627.TP
f7bbc79d
MK
3628.IR LazyFree " %lu (since Linux 4.12)"
3629Shows the amount of memory marked by
3630.BR madvise (2)
3631.BR MADV_FREE .
3632.TP
3ba3d5b1
MK
3633.IR AnonHugePages " %lu (since Linux 2.6.38)"
3634(\fBCONFIG_TRANSPARENT_HUGEPAGE\fP is required.)
7fac88a9 3635Non-file backed huge pages mapped into user-space page tables.
3ba3d5b1 3636.TP
4ad958e1
MK
3637.IR ShmemHugePages " %lu (since Linux 4.8)"
3638(\fBCONFIG_TRANSPARENT_HUGEPAGE\fP is required.)
4e07c70f
MK
3639Memory used by shared memory (shmem) and
3640.BR tmpfs (5)
3641allocated with huge pages
4ad958e1
MK
3642.TP
3643.IR ShmemPmdMapped " %lu (since Linux 4.8)"
3644(\fBCONFIG_TRANSPARENT_HUGEPAGE\fP is required.)
956e74b4 3645Shared memory mapped into user space with huge pages.
4ad958e1 3646.TP
43179f55
MK
3647.IR CmaTotal " %lu (since Linux 3.1)"
3648Total CMA (Contiguous Memory Allocator) pages.
3649(\fBCONFIG_CMA\fP is required.)
3650.TP
3651.IR CmaFree " %lu (since Linux 3.1)"
3652Free CMA (Contiguous Memory Allocator) pages.
3653(\fBCONFIG_CMA\fP is required.)
3654.TP
3ba3d5b1
MK
3655.IR HugePages_Total " %lu"
3656(\fBCONFIG_HUGETLB_PAGE\fP is required.)
3657The size of the pool of huge pages.
3658.TP
3659.IR HugePages_Free " %lu"
3660(\fBCONFIG_HUGETLB_PAGE\fP is required.)
3661The number of huge pages in the pool that are not yet allocated.
3662.TP
3663.IR HugePages_Rsvd " %lu (since Linux 2.6.17)"
3664(\fBCONFIG_HUGETLB_PAGE\fP is required.)
3665This is the number of huge pages for
3666which a commitment to allocate from the pool has been made,
3667but no allocation has yet been made.
3668These reserved huge pages
3669guarantee that an application will be able to allocate a
3670huge page from the pool of huge pages at fault time.
3671.TP
aa8a6b4f 3672.IR HugePages_Surp " %lu (since Linux 2.6.24)"
3ba3d5b1
MK
3673(\fBCONFIG_HUGETLB_PAGE\fP is required.)
3674This is the number of huge pages in
3675the pool above the value in
3676.IR /proc/sys/vm/nr_hugepages .
3677The maximum number of surplus huge pages is controlled by
3678.IR /proc/sys/vm/nr_overcommit_hugepages .
3679.TP
3680.IR Hugepagesize " %lu"
3681(\fBCONFIG_HUGETLB_PAGE\fP is required.)
3682The size of huge pages.
d5268de1
MK
3683.TP
3684.IR DirectMap4k " %lu (since Linux 2.6.27)"
3685Number of bytes of RAM linearly mapped by kernel in 4kB pages.
3686(x86.)
3687.TP
3688.IR DirectMap4M " %lu (since Linux 2.6.27)"
3689Number of bytes of RAM linearly mapped by kernel in 4MB pages.
3690(x86 with
3691.BR CONFIG_X86_64
3692or
3693.BR CONFIG_X86_PAE
3694enabled.)
3695.TP
3696.IR DirectMap2M " %lu (since Linux 2.6.27)"
3697Number of bytes of RAM linearly mapped by kernel in 2MB pages.
3698(x86 with neither
3699.BR CONFIG_X86_64
3700nor
3701.BR CONFIG_X86_PAE
3702enabled.)
3703.TP
3704.IR DirectMap1G " %lu (since Linux 2.6.27)"
3705(x86 with
3706.BR CONFIG_X86_64
3707and
3708.B CONFIG_X86_DIRECT_GBPAGES
3709enabled.)
3ba3d5b1 3710.RE
fea681da 3711.TP
aa341984
MK
3712.I /proc/modules
3713A text list of the modules that have been loaded by the system.
3714See also
3715.BR lsmod (8).
3716.TP
fea681da 3717.I /proc/mounts
c1eea65a 3718Before kernel 2.4.19, this file was a list
9ee4a2b6 3719of all the filesystems currently mounted on the system.
ef5b47f6
MK
3720With the introduction of per-process mount namespaces in Linux 2.4.19 (see
3721.BR mount_namespaces (7)),
3722this file became a link to
c1eea65a 3723.IR /proc/self/mounts ,
732e54dd 3724which lists the mount points of the process's own mount namespace.
fea681da 3725The format of this file is documented in
31e9a9ec 3726.BR fstab (5).
fea681da 3727.TP
fea681da 3728.I /proc/mtrr
c13182ef 3729Memory Type Range Registers.
66a9882e 3730See the Linux kernel source file
a8999e1f
ES
3731.I Documentation/x86/mtrr.txt
3732.\" commit 7225e75144b9718cbbe1820d9c011c809d5773fd
3733(or
cfe70b66 3734.I Documentation/mtrr.txt
a8999e1f 3735before Linux 2.6.28)
fea681da
MK
3736for details.
3737.TP
3738.I /proc/net
ccb4bcdc
MK
3739This directory contains various files and subdirectories containing
3740information about the networking layer.
3741The files contain ASCII structures and are,
59a40ed7
MK
3742therefore, readable with
3743.BR cat (1).
c13182ef 3744However, the standard
fea681da
MK
3745.BR netstat (8)
3746suite provides much cleaner access to these files.
2dad4c59 3747.IP
9fb88bc8
MK
3748With the advent of network namespaces,
3749various information relating to the network stack is virtualized (see
3750.BR namespaces (7)).
3751Thus, since Linux 2.6.25,
3752.\" commit e9720acd728a46cb40daa52c99a979f7c4ff195c
3753.IR /proc/net
3754is a symbolic link to the directory
3755.IR /proc/self/net ,
3756which contains the same files and directories as listed below.
3757However, these files and directories now expose information
3758for the network namespace of which the process is a member.
fea681da
MK
3759.TP
3760.I /proc/net/arp
3761This holds an ASCII readable dump of the kernel ARP table used for
c13182ef 3762address resolutions.
01d0a447 3763It will show both dynamically learned and preprogrammed ARP entries.
c13182ef 3764The format is:
c1a022dc
MK
3765.IP
3766.in 7n
3767.EX
fea681da
MK
3768IP address HW type Flags HW address Mask Device
3769192.168.0.50 0x1 0x2 00:50:BF:25:68:F3 * eth0
3770192.168.0.250 0x1 0xc 00:00:00:00:00:00 * eth0
c1a022dc 3771.EE
fea681da 3772.in
c1a022dc 3773.IP
6c04f928 3774Here "IP address" is the IPv4 address of the machine and the "HW type"
c13182ef
MK
3775is the hardware type of the address from RFC\ 826.
3776The flags are the internal
9a67332e
MK
3777flags of the ARP structure (as defined in
3778.IR /usr/include/linux/if_arp.h )
3779and
6c04f928 3780the "HW address" is the data link layer mapping for that IP address if
fea681da
MK
3781it is known.
3782.TP
3783.I /proc/net/dev
c13182ef
MK
3784The dev pseudo-file contains network device status information.
3785This gives
3786the number of received and sent packets, the number of errors and
fea681da 3787collisions
c13182ef
MK
3788and other basic statistics.
3789These are used by the
fea681da 3790.BR ifconfig (8)
c13182ef
MK
3791program to report device status.
3792The format is:
c1a022dc 3793.IP
fea681da 3794.in 1n
c1a022dc 3795.EX
fea681da
MK
3796Inter-| Receive | Transmit
3797 face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
3798 lo: 2776770 11307 0 0 0 0 0 0 2776770 11307 0 0 0 0 0 0
3799 eth0: 1215645 2751 0 0 0 0 0 0 1782404 4324 0 0 0 427 0 0
3800 ppp0: 1622270 5552 1 0 0 0 0 0 354130 5669 0 0 0 0 0 0
3801 tap0: 7714 81 0 0 0 0 0 0 7714 81 0 0 0 0 0 0
c1a022dc 3802.EE
fea681da 3803.in
fea681da
MK
3804.\" .TP
3805.\" .I /proc/net/ipx
3806.\" No information.
3807.\" .TP
3808.\" .I /proc/net/ipx_route
3809.\" No information.
3810.TP
3811.I /proc/net/dev_mcast
3812Defined in
3813.IR /usr/src/linux/net/core/dev_mcast.c :
37d5e699
MK
3814.IP
3815.in +4
3816.EX
9fdfa163 3817indx interface_name dmi_u dmi_g dmi_address
fea681da
MK
38182 eth0 1 0 01005e000001
38193 eth1 1 0 01005e000001
38204 eth2 1 0 01005e000001
37d5e699 3821.EE
fea681da 3822.in
fea681da
MK
3823.TP
3824.I /proc/net/igmp
c13182ef
MK
3825Internet Group Management Protocol.
3826Defined in
fea681da
MK
3827.IR /usr/src/linux/net/core/igmp.c .
3828.TP
3829.I /proc/net/rarp
3830This file uses the same format as the
3831.I arp
3832file and contains the current reverse mapping database used to provide
3833.BR rarp (8)
c13182ef
MK
3834reverse address lookup services.
3835If RARP is not configured into the
fea681da
MK
3836kernel,
3837this file will not be present.
3838.TP
3839.I /proc/net/raw
c13182ef
MK
3840Holds a dump of the RAW socket table.
3841Much of the information is not of
fea681da 3842use
c13182ef 3843apart from debugging.
6c04f928 3844The "sl" value is the kernel hash slot for the
fea681da 3845socket,
6c04f928
MK
3846the "local_address" is the local address and protocol number pair.
3847\&"St" is
c13182ef
MK
3848the internal status of the socket.
3849The "tx_queue" and "rx_queue" are the
fea681da 3850outgoing and incoming data queue in terms of kernel memory usage.
94e9d9fe 3851The "tr", "tm\->when", and "rexmits" fields are not used by RAW.
fdc196f5
MK
3852The "uid"
3853field holds the effective UID of the creator of the socket.
fea681da
MK
3854.\" .TP
3855.\" .I /proc/net/route
3856.\" No information, but looks similar to
3857.\" .BR route (8).
3858.TP
3859.I /proc/net/snmp
c13182ef 3860This file holds the ASCII data needed for the IP, ICMP, TCP, and UDP
fea681da 3861management
763f0e47 3862information bases for an SNMP agent.
fea681da
MK
3863.TP
3864.I /proc/net/tcp
c13182ef
MK
3865Holds a dump of the TCP socket table.
3866Much of the information is not
3867of use apart from debugging.
3868The "sl" value is the kernel hash slot
6beb1671
MK
3869for the socket, the "local_address" is the local address and port number pair.
3870The "rem_address" is the remote address and port number pair
6c04f928
MK
3871(if connected).
3872\&"St" is the internal status of the socket.
3873The "tx_queue" and "rx_queue" are the
fea681da 3874outgoing and incoming data queue in terms of kernel memory usage.
94e9d9fe 3875The "tr", "tm\->when", and "rexmits" fields hold internal information of
f33774c4 3876the kernel socket state and are useful only for debugging.
fdc196f5
MK
3877The "uid"
3878field holds the effective UID of the creator of the socket.
fea681da
MK
3879.TP
3880.I /proc/net/udp
c13182ef
MK
3881Holds a dump of the UDP socket table.
3882Much of the information is not of
3883use apart from debugging.
3884The "sl" value is the kernel hash slot for the
6beb1671
MK
3885socket, the "local_address" is the local address and port number pair.
3886The "rem_address" is the remote address and port number pair
f2d607ee
MK
3887(if connected).
3888"St" is the internal status of the socket.
fea681da 3889The "tx_queue" and "rx_queue" are the outgoing and incoming data queue
c13182ef 3890in terms of kernel memory usage.
94e9d9fe 3891The "tr", "tm\->when", and "rexmits" fields
c13182ef 3892are not used by UDP.
fdc196f5
MK
3893The "uid"
3894field holds the effective UID of the creator of the socket.
fea681da 3895The format is:
c1a022dc 3896.IP
fea681da 3897.in 1n
c1a022dc 3898.EX
94e9d9fe 3899sl local_address rem_address st tx_queue rx_queue tr rexmits tm\->when uid
fea681da
MK
3900 1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0
3901 1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0
3902 1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0
c1a022dc 3903.EE
fea681da 3904.in
c1a022dc 3905.IP
fea681da
MK
3906.TP
3907.I /proc/net/unix
008f1ecc 3908Lists the UNIX domain sockets present within the system and their
c13182ef
MK
3909status.
3910The format is:
c1a022dc
MK
3911.IP
3912.in 1n
3913.EX
fea681da
MK
3914Num RefCount Protocol Flags Type St Path
3915 0: 00000002 00000000 00000000 0001 03
3916 1: 00000001 00000000 00010000 0001 01 /dev/printer
c1a022dc
MK
3917.EE
3918.in
3919.IP
756f55f6
MK
3920The fields are as follows:
3921.RS
3922.TP 10
3923.IR Num :
3924the kernel table slot number.
3925.TP
3926.IR RefCount :
3927the number of users of the socket.
3928.TP
3929.IR Protocol :
3930currently always 0.
3931.TP
3932.IR Flags :
3933the internal kernel flags holding the status of the socket.
3934.TP
3935.IR Type :
a405066e
MK
3936the socket type.
3937For
3938.BR SOCK_STREAM
3939sockets, this is 0001; for
3940.BR SOCK_DGRAM
3941sockets, it is 0002; and for
3942.BR SOCK_SEQPACKET
3943sockets, it is 0005.
756f55f6
MK
3944.TP
3945.IR St :
3946the internal state of the socket.
3947.TP
3948.IR Path :
590ba7e5 3949the bound pathname (if any) of the socket.
8f8a46fb
MK
3950Sockets in the abstract namespace are included in the list,
3951and are shown with a
3952.I Path
3953that commences with the character '@'.
756f55f6 3954.RE
fea681da 3955.TP
ed8de0e4 3956.I /proc/net/netfilter/nfnetlink_queue
6f858d5c 3957This file contains information about netfilter user-space queueing, if used.
f2d607ee
MK
3958Each line represents a queue.
3959Queues that have not been subscribed to
6f858d5c 3960by user space are not shown.
37d5e699
MK
3961.IP
3962.in +4n
3963.EX
ed8de0e4
FW
3964 1 4207 0 2 65535 0 0 0 1
3965 (1) (2) (3)(4) (5) (6) (7) (8)
37d5e699
MK
3966.EE
3967.in
ed8de0e4
FW
3968.IP
3969The fields in each line are:
3970.RS 7
3971.TP 5
3972(1)
f2d607ee
MK
3973The ID of the queue.
3974This matches what is specified in the
ed8de0e4
FW
3975.B \-\-queue\-num
3976or
3977.B \-\-queue\-balance
3978options to the
3979.BR iptables (8)
f2d607ee
MK
3980NFQUEUE target.
3981See
ed8de0e4
FW
3982.BR iptables-extensions (8)
3983for more information.
3984.TP
3985(2)
7672e08e 3986The netlink port ID subscribed to the queue.
ed8de0e4
FW
3987.TP
3988(3)
3989The number of packets currently queued and waiting to be processed by
3990the application.
3991.TP
3992(4)
f2d607ee
MK
3993The copy mode of the queue.
3994It is either 1 (metadata only) or 2
6f858d5c 3995(also copy payload data to user space).
ed8de0e4
FW
3996.TP
3997(5)
1dea597b 3998Copy range; that is, how many bytes of packet payload should be copied to
6f858d5c 3999user space at most.
ed8de0e4
FW
4000.TP
4001(6)
f2d607ee
MK
4002queue dropped.
4003Number of packets that had to be dropped by the kernel because
6f858d5c 4004too many packets are already waiting for user space to send back the mandatory
ed8de0e4
FW
4005accept/drop verdicts.
4006.TP
4007(7)
f2d607ee
MK
4008queue user dropped.
4009Number of packets that were dropped within the netlink
4010subsystem.
4011Such drops usually happen when the corresponding socket buffer is
6f858d5c 4012full; that is, user space is not able to read messages fast enough.
ed8de0e4
FW
4013.TP
4014(8)
f2d607ee
MK
4015sequence number.
4016Every queued packet is associated with a (32-bit)
ed8de0e4
FW
4017monotonically-increasing sequence number.
4018This shows the ID of the most recent packet queued.
4019.RE
4020.IP
f33774c4 4021The last number exists only for compatibility reasons and is always 1.
ed8de0e4 4022.TP
fea681da 4023.I /proc/partitions
f042d149
MK
4024Contains the major and minor numbers of each partition as well as the number
4025of 1024-byte blocks and the partition name.
fea681da
MK
4026.TP
4027.I /proc/pci
4028This is a listing of all PCI devices found during kernel initialization
4029and their configuration.
2dad4c59 4030.IP
59a40ed7
MK
4031This file has been deprecated in favor of a new
4032.I /proc
2990d781
MK
4033interface for PCI
4034.RI ( /proc/bus/pci ).
4035It became optional in Linux 2.2 (available with
4036.B CONFIG_PCI_OLD_PROC
4037set at kernel compilation).
24b74457 4038It became once more nonoptionally enabled in Linux 2.4.
2990d781
MK
4039Next, it was deprecated in Linux 2.6 (still available with
4040.B CONFIG_PCI_LEGACY_PROC
4041set), and finally removed altogether since Linux 2.6.17.
43d42cc0 4042.\" FIXME Document /proc/sched_debug (since Linux 2.6.23)
69119dc7 4043.\" See also /proc/[pid]/sched
caea7868
MK
4044.TP
4045.IR /proc/profile " (since Linux 2.4)"
4046This file is present only if the kernel was booted with the
4047.I profile=1
4048command-line option.
4049It exposes kernel profiling information in a binary format for use by
4050.BR readprofile (1).
4051Writing (e.g., an empty string) to this file resets the profiling counters;
4052on some architectures,
4053writing a binary integer "profiling multiplier" of size
4054.IR sizeof(int)
8a3ac89a 4055sets the profiling interrupt frequency.
fea681da
MK
4056.TP
4057.I /proc/scsi
59a40ed7
MK
4058A directory with the
4059.I scsi
4060mid-level pseudo-file and various SCSI low-level
2990d781
MK
4061driver directories,
4062which contain a file for each SCSI host in this system, all of
c13182ef
MK
4063which give the status of some part of the SCSI IO subsystem.
4064These files contain ASCII structures and are, therefore, readable with
2990d781 4065.BR cat (1).
2dad4c59 4066.IP
c13182ef 4067You can also write to some of the files to reconfigure the subsystem or
59a40ed7 4068switch certain features on or off.
fea681da
MK
4069.TP
4070.I /proc/scsi/scsi
c13182ef 4071This is a listing of all SCSI devices known to the kernel.
59a40ed7 4072The listing is similar to the one seen during bootup.
c13182ef 4073scsi currently supports only the \fIadd-single-device\fP command which
59a40ed7 4074allows root to add a hotplugged device to the list of known devices.
2dad4c59 4075.IP
59a40ed7 4076The command
37d5e699 4077.IP
59a40ed7 4078.in +4n
37d5e699 4079.EX
59a40ed7 4080echo \(aqscsi add-single-device 1 0 5 0\(aq > /proc/scsi/scsi
37d5e699 4081.EE
59a40ed7 4082.in
37d5e699 4083.IP
c13182ef
MK
4084will cause
4085host scsi1 to scan on SCSI channel 0 for a device on ID 5 LUN 0.
4086If there
fea681da
MK
4087is already a device known on this address or the address is invalid, an
4088error will be returned.
4089.TP
4090.I /proc/scsi/[drivername]
c13182ef
MK
4091\fI[drivername]\fP can currently be NCR53c7xx, aha152x, aha1542, aha1740,
4092aic7xxx, buslogic, eata_dma, eata_pio, fdomain, in2000, pas16, qlogic,
4093scsi_debug, seagate, t128, u15-24f, ultrastore, or wd7000.
4094These directories show up for all drivers that registered at least one
59a40ed7 4095SCSI HBA.
c13182ef 4096Every directory contains one file per registered host.
59a40ed7 4097Every host-file is named after the number the host was assigned during
c13182ef 4098initialization.
2dad4c59 4099.IP
c13182ef 4100Reading these files will usually show driver and host configuration,
f78ed33a 4101statistics, and so on.
2dad4c59 4102.IP
fea681da
MK
4103Writing to these files allows different things on different hosts.
4104For example, with the \fIlatency\fP and \fInolatency\fP commands,
4105root can switch on and off command latency measurement code in the
c13182ef
MK
4106eata_dma driver.
4107With the \fIlockup\fP and \fIunlock\fP commands,
4108root can control bus lockups simulated by the scsi_debug driver.
fea681da
MK
4109.TP
4110.I /proc/self
59a40ed7
MK
4111This directory refers to the process accessing the
4112.I /proc
9ee4a2b6 4113filesystem,
59a40ed7
MK
4114and is identical to the
4115.I /proc
4116directory named by the process ID of the same process.
fea681da
MK
4117.TP
4118.I /proc/slabinfo
c13182ef 4119Information about kernel caches.
c13182ef 4120See
fea681da
MK
4121.BR slabinfo (5)
4122for details.
4123.TP
4124.I /proc/stat
c13182ef
MK
4125kernel/system statistics.
4126Varies with architecture.
4127Common
fea681da
MK
4128entries include:
4129.RS
4130.TP
46f6dbe8
ES
4131.I cpu 10132153 290696 3084719 46828483 16683 0 25195 0 175628 0
4132.TQ
4133.I cpu0 1393280 32966 572056 13343292 6130 0 17875 0 23933 0
bfbfcd18 4134The amount of time, measured in units of
268f000b
MK
4135USER_HZ (1/100ths of a second on most architectures, use
4136.IR sysconf(_SC_CLK_TCK)
4137to obtain the right value),
b81087ab 4138.\" 1024 on Alpha and ia64
46f6dbe8
ES
4139that the system ("cpu" line) or the specific CPU ("cpu\fIN\fR" line)
4140spent in various states:
ae3b8047
MK
4141.RS
4142.TP
4143.I user
ea0841f6 4144(1) Time spent in user mode.
ae3b8047
MK
4145.TP
4146.I nice
0633f951 4147(2) Time spent in user mode with low priority (nice).
9f1b9726 4148.TP
ae3b8047 4149.I system
0633f951 4150(3) Time spent in system mode.
ae3b8047
MK
4151.TP
4152.I idle
ea0841f6 4153(4) Time spent in the idle task.
bea08fec 4154.\" FIXME . Actually, the following info about the /proc/stat 'cpu' field
e04a1f93
MK
4155.\" does not seem to be quite right (at least in 2.6.12 or 3.6):
4156.\" the idle time in /proc/uptime does not quite match this value
4157This value should be USER_HZ times the
4cb1deb7
MK
4158second entry in the
4159.I /proc/uptime
4160pseudo-file.
ae3b8047
MK
4161.TP
4162.IR iowait " (since Linux 2.5.41)"
ea0841f6 4163(5) Time waiting for I/O to complete.
e0a73a31
MK
4164This value is not reliable, for the following reasons:
4165.\" See kernel commit 9c240d757658a3ae9968dd309e674c61f07c7f48
4166.RS
4167.IP 1. 3
4168The CPU will not wait for I/O to complete;
4169iowait is the time that a task is waiting for I/O to complete.
4170When a CPU goes into idle state for outstanding task I/O,
4171another task will be scheduled on this CPU.
4172.IP 2.
4173On a multi-core CPU,
4174the task waiting for I/O to complete is not running on any CPU,
4175so the iowait of each CPU is difficult to calculate.
4176.IP 3.
4177The value in this field may
4178.I decrease
4179in certain conditions.
2d3fb75b 4180.RE
ae3b8047
MK
4181.TP
4182.IR irq " (since Linux 2.6.0-test4)"
ea0841f6 4183(6) Time servicing interrupts.
ae3b8047 4184.TP
0633f951 4185.IR softirq " (since Linux 2.6.0-test4)"
ea0841f6 4186(7) Time servicing softirqs.
ae3b8047
MK
4187.TP
4188.IR steal " (since Linux 2.6.11)"
ea0841f6 4189(8) Stolen time, which is the time spent in other operating systems when
9de1f6cc 4190running in a virtualized environment
ae3b8047
MK
4191.TP
4192.IR guest " (since Linux 2.6.24)"
0633f951 4193(9) Time spent running a virtual CPU for guest
afef1764 4194operating systems under the control of the Linux kernel.
14c06953 4195.\" See Changelog entry for 5e84cfde51cf303d368fcb48f22059f37b3872de
d4fd4120
MK
4196.TP
4197.IR guest_nice " (since Linux 2.6.33)"
4198.\" commit ce0e7b28fb75cb003cfc8d0238613aaf1c55e797
4199(10) Time spent running a niced guest (virtual CPU for guest
4200operating systems under the control of the Linux kernel).
ae3b8047 4201.RE
fea681da
MK
4202.TP
4203\fIpage 5741 1808\fP
4204The number of pages the system paged in and the number that were paged
4205out (from disk).
4206.TP
4207\fIswap 1 0\fP
4208The number of swap pages that have been brought in and out.
4209.TP
bea08fec 4210.\" FIXME . The following is not the full picture for the 'intr' of
777f5a9e 4211.\" /proc/stat on 2.6:
fea681da 4212\fIintr 1462898\fP
bfbfcd18
MK
4213This line shows counts of interrupts serviced since boot time,
4214for each of the possible system interrupts.
d63ff76e 4215The first column is the total of all interrupts serviced
d6a56978
MK
4216including unnumbered architecture specific interrupts;
4217each subsequent column is the total for that particular numbered interrupt.
d63ff76e 4218Unnumbered interrupts are not shown, only summed into the total.
fea681da
MK
4219.TP
4220\fIdisk_io: (2,0):(31,30,5764,1,2) (3,0):\fP...
636297e9 4221(major,disk_idx):(noinfo, read_io_ops, blks_read, write_io_ops, blks_written)
bfbfcd18
MK
4222.br
4223(Linux 2.4 only)
fea681da
MK
4224.TP
4225\fIctxt 115315\fP
4226The number of context switches that the system underwent.
4227.TP
4228\fIbtime 769041601\fP
f49c451a 4229boot time, in seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
fea681da
MK
4230.TP
4231\fIprocesses 86031\fP
4232Number of forks since boot.
bfbfcd18
MK
4233.TP
4234\fIprocs_running 6\fP
4235Number of processes in runnable state.
5fab2e7c 4236(Linux 2.5.45 onward.)
bfbfcd18
MK
4237.TP
4238\fIprocs_blocked 2\fP
4239Number of processes blocked waiting for I/O to complete.
5fab2e7c 4240(Linux 2.5.45 onward.)
76f6f102
ES
4241.TP
4242.I softirq 229245889 94 60001584 13619 5175704 2471304 28 51212741 59130143 0 51240672
4243.\" commit d3d64df21d3d0de675a0d3ffa7c10514f3644b30
4244This line shows the number of softirq for all CPUs.
4245The first column is the total of all softirqs and
4246each subsequent column is the total for particular softirq.
d7f23d0b 4247(Linux 2.6.31 onward.)
fea681da
MK
4248.RE
4249.TP
4250.I /proc/swaps
c13182ef
MK
4251Swap areas in use.
4252See also
fea681da
MK
4253.BR swapon (8).
4254.TP
4255.I /proc/sys
4256This directory (present since 1.3.57) contains a number of files
4257and subdirectories corresponding to kernel variables.
4258These variables can be read and sometimes modified using
9ee4a2b6 4259the \fI/proc\fP filesystem, and the (deprecated)
fea681da 4260.BR sysctl (2)
c13182ef 4261system call.
2dad4c59 4262.IP
e8aa7100 4263String values may be terminated by either \(aq\\0\(aq or \(aq\\n\(aq.
2dad4c59 4264.IP
84ff8c1e
HS
4265Integer and long values may be written either in decimal or in
4266hexadecimal notation (e.g. 0x3FFF).
e8aa7100
MK
4267When writing multiple integer or long values, these may be separated
4268by any of the following whitespace characters:
4269\(aq\ \(aq, \(aq\\t\(aq, or \(aq\\n\(aq.
4270Using other separators leads to the error
84ff8c1e 4271.BR EINVAL .
fea681da 4272.TP
6ab7c0aa 4273.IR /proc/sys/abi " (since Linux 2.4.10)"
fea681da 4274This directory may contain files with application binary information.
6ab7c0aa 4275.\" On some systems, it is not present.
66a9882e 4276See the Linux kernel source file
6ab7c0aa
MK
4277.I Documentation/sysctl/abi.txt
4278for more information.
fea681da
MK
4279.TP
4280.I /proc/sys/debug
4281This directory may be empty.
4282.TP
4283.I /proc/sys/dev
e2badfdf 4284This directory contains device-specific information (e.g.,
9a67332e 4285.IR dev/cdrom/info ).
fea681da
MK
4286On
4287some systems, it may be empty.
4288.TP
4289.I /proc/sys/fs
49236d3c 4290This directory contains the files and subdirectories for kernel variables
9ee4a2b6 4291related to filesystems.
fea681da
MK
4292.TP
4293.I /proc/sys/fs/binfmt_misc
c13182ef 4294Documentation for files in this directory can be found
a2923df0
MK
4295in the Linux kernel source in the file
4296.IR Documentation/admin-guide/binfmt-misc.rst
4297(or in
4298.IR Documentation/binfmt_misc.txt
4299on older kernels).
fea681da 4300.TP
59a40ed7
MK
4301.IR /proc/sys/fs/dentry-state " (since Linux 2.2)"
4302This file contains information about the status of the
4303directory cache (dcache).
4304The file contains six numbers,
c13182ef 4305.IR nr_dentry ", " nr_unused ", " age_limit " (age in seconds), "
59a40ed7 4306.I want_pages
fea681da 4307(pages requested by system) and two dummy values.
59a40ed7
MK
4308.RS
4309.IP * 2
4310.I nr_dentry
4311is the number of allocated dentries (dcache entries).
4312This field is unused in Linux 2.2.
4313.IP *
4314.I nr_unused
4315is the number of unused dentries.
4316.IP *
4317.I age_limit
4318.\" looks like this is unused in kernels 2.2 to 2.6
4319is the age in seconds after which dcache entries
4320can be reclaimed when memory is short.
4321.IP *
4322.I want_pages
4323.\" looks like this is unused in kernels 2.2 to 2.6
c7094399 4324is nonzero when the kernel has called shrink_dcache_pages() and the
fea681da 4325dcache isn't pruned yet.
59a40ed7 4326.RE
fea681da
MK
4327.TP
4328.I /proc/sys/fs/dir-notify-enable
4329This file can be used to disable or enable the
4330.I dnotify
4331interface described in
4332.BR fcntl (2)
4333on a system-wide basis.
4334A value of 0 in this file disables the interface,
4335and a value of 1 enables it.
4336.TP
4337.I /proc/sys/fs/dquot-max
4338This file shows the maximum number of cached disk quota entries.
4339On some (2.4) systems, it is not present.
4340If the number of free cached disk quota entries is very low and
4341you have some awesome number of simultaneous system users,
4342you might want to raise the limit.
4343.TP
4344.I /proc/sys/fs/dquot-nr
4345This file shows the number of allocated disk quota
4346entries and the number of free disk quota entries.
4347.TP
24cb4a4b 4348.IR /proc/sys/fs/epoll " (since Linux 2.6.28)"
242b46af
MK
4349This directory contains the file
4350.IR max_user_watches ,
24cb4a4b
MK
4351which can be used to limit the amount of kernel memory consumed by the
4352.I epoll
4353interface.
4354For further details, see