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