PROC - Linux手册页
Linux程序员手册 第5部分
更新日期: 2020-08-13
名称
proc-进程信息伪文件系统
说明
proc文件系统是伪文件系统,它提供了内核数据结构的接口。它通常安装在/ proc上。通常,它是由系统自动安装的,但也可以使用以下命令手动安装:
mount -t proc proc /proc
proc文件系统中的大多数文件都是只读的,但是某些文件是可写的,从而允许更改内核变量。
Mount options
proc文件系统支持以下安装选项:
- hidepid=n(since Linux 3.3)
This option controls who can access the information in
/proc/[pid]directories.
The argument,
n,is one of the following values:
- 0
每个人都可以访问所有/ proc / [pid]目录。这是传统行为,如果未指定此安装选项,则为默认行为。
- 1
用户不能访问任何/ proc / [pid]目录中的文件和子目录,但可以访问它们自己的目录(/ proc / [pid]目录本身仍然可见)。诸如/ proc / [pid] / cmdline和/ proc / [pid] / status之类的敏感文件现在受到保护,以防止其他用户使用。这使得无法了解是否有任何用户正在运行特定程序(只要该程序不会通过其行为来表明自己)。
- 2
对于模式1,但除此之外,其他用户的/ proc / [pid]目录也变得不可见。这意味着/ proc / [pid]条目不能再用于发现系统上的PID。这并不能掩盖存在具有特定PID值的进程的事实(可以通过其他方式(例如,通过" kill -0 $ PID"来获知)),但是可以掩盖进程的UID和GID,否则可以通过在/ proc / [pid]目录上使用stat(2)来学习。这极大地增加了攻击者收集有关正在运行的进程的信息的任务(例如,发现某个守护程序是否正在以提升的特权运行,另一个用户是否正在运行某个敏感程序,其他用户是否正在运行任何程序等等)。
- gid=gid(since Linux 3.3)
指定其成员被授权学习进程信息的组的ID,否则该组将被Hidepid禁止(即,该组中的用户的行为就像/ proc是用hidepid = 0装入的)。应该使用该组,而不是将非root用户放入sudoers(5)文件之类的方法。
Overview
在/ proc下,有以下文件和子目录的常规组:
- /proc/[pid]subdirectories
这些子目录中的每个子目录都包含文件和子目录,这些文件和子目录公开了具有相应进程ID的有关该进程的信息。
在每个/ proc / [pid]目录下,一个任务子目录包含task / [tid]形式的子目录,这些子目录包含有关进程中每个线程的相应信息,其中tid是线程的内核线程ID。
当使用getdents(2)遍历/ proc时,/ proc / [pid]子目录是可见的(因此当使用ls(1)查看/ proc的内容时,它们是可见的)。
- /proc/[tid]subdirectories
这些子目录中的每个子目录都包含文件和子目录,这些文件和子目录公开了有关具有相应线程ID的线程的信息。这些目录的内容与相应的/ proc / [pid] / task / [tid]目录相同。
当使用getdents(2)遍历/ proc时,/ proc / [tid]子目录不可见(因此当使用ls(1)查看/ proc的内容时,/ proc / [tid]子目录也不可见)。
- /proc/self
当进程访问此魔术符号链接时,它将解析到进程自己的/ proc / [pid]目录。
- /proc/thread-self
当线程访问此魔术符号链接时,它将解析到进程自己的/ proc / self / task / [tid]目录。
- /proc/[a-z]*
/ proc下的各种其他文件和子目录公开了系统范围的信息。
以上所有内容将在下面更详细地描述。
Files and directories
以下列表提供了/ proc层次结构下许多文件和目录的详细信息。
- /proc/[pid]
每个正在运行的进程都有一个数字子目录。子目录由进程ID命名。每个/ proc / [pid]子目录包含下面描述的伪文件和目录。
/ proc / [pid]目录中的文件通常由进程的有效用户和有效组ID拥有。但是,作为安全措施,如果进程的" dumpable"属性设置为非1的值,则将所有权设置为root:root。
在Linux 4.11之前,root:root表示"全局" root用户ID和组ID(即,初始用户名称空间中的UID 0和GID 0)。从Linux 4.11开始,如果进程位于非初始用户名称空间中,该名称空间在名称空间内具有用户(组)ID 0的有效映射,则使/ proc / [pid]下文件的用户(组)所有权成为与名称空间的根用户(组)ID相同。这意味着在容器内部,事情按容器" root"用户的预期进行。
进程的"可转储"属性可能由于以下原因而发生变化:
将" dumpable"属性重置为1会将/ proc / [pid] / *文件的所有权还原为进程的有效UID和GID。但是请注意,如果随后修改了有效的UID或GID,则可以重置pumptl(2)中所述的" dumpable"属性。因此,可能需要在对过程的有效UID或GID进行任何所需的更改之后,重置"可转储"属性。
- /proc/[pid]/attr
该目录中的文件提供了用于安全模块的API。该目录的内容是可以读写的文件,以设置与安全性相关的属性。添加该目录是为了支持SELinux,但其目的是使API具有足够的通用性以支持其他安全模块。为了便于说明,下面提供了SELinux如何使用这些文件的示例。
仅当内核配置有CONFIG_SECURITY时,此目录才存在。
- /proc/[pid]/attr/current(since Linux 2.6.0)
该文件的内容表示该进程的当前安全性属性。
在SELinux中,此文件用于获取进程的安全上下文。在Linux 2.6.11之前,此文件不能用于设置安全性上下文(始终拒绝写入),因为SELinux受限的进程安全性已转换为execve(2)(请参阅/ proc / [pid] / attr的描述) / exec,如下)。从Linux 2.6.11开始,SELinux取消了此限制,并在策略授权的情况下通过对该节点的写操作开始支持"设置"操作,尽管使用此操作仅适用于可信任的应用程序,可以信任其在新旧之间保持任何期望的分隔安全上下文。
在Linux 2.6.28之前,SELinux不允许多线程进程中的线程通过此节点设置其安全上下文,因为这会导致共享相同内存空间的线程的安全上下文之间出现不一致。从Linux 2.6.28开始,如果新的安全性上下文受旧的安全性上下文限制,则SELinux取消了此限制,并开始支持多线程进程中线程的"设置"操作,其中旧的安全性上下文是在策略中定义的,并保证新的安全性。上下文具有旧安全上下文权限的子集。
其他安全模块可以选择通过写入此节点来支持"设置"操作。
- /proc/[pid]/attr/exec(since Linux 2.6.0)
该文件表示在随后的execve(2)上分配给进程的属性。
在SELinux中,这需要支持角色/域转换,而execve(2)是进行此类转换的首选点,因为它可以更好地控制新安全标签中的流程初始化和状态继承。在SELinux中,此属性在execve(2)上重置,因此新程序将对其可能执行的所有execve(2)调用恢复为默认行为。在SELinux中,进程只能设置自己的/ proc / [pid] / attr / exec属性。
- /proc/[pid]/attr/fscreate(since Linux 2.6.0)
SELinux使用此文件来支持以安全状态创建文件(使用上述系统调用),因此在创建时间与设置属性的时间之间不存在获得不适当访问的风险。在SELinux中,此属性在execve(2)上重置,因此新程序将对其可能进行的任何文件创建调用恢复为默认行为,但是除非明确将其重置,否则该属性将在程序中的多个文件创建调用中持续存在。 。在SELinux中,进程只能设置自己的/ proc / [pid] / attr / fscreate属性。
- /proc/[pid]/attr/keycreate(since Linux 2.6.18)
如果进程将安全性上下文写入此文件,则所有后续创建的密钥(add_key(2))都将使用该上下文标记。有关更多信息,请参阅内核源文件Documentation / security / keys / core.rst(或在Linux上的3.0和4.13之间的文件Documentation / security / keys.txt,或在Linux 3.0之前的Documentation / keys.txt)。
- /proc/[pid]/attr/prev(since Linux 2.6.0)
该文件包含最后一个execve(2)之前的进程的安全上下文;即/ proc / [pid] / attr / current的先前值。
- /proc/[pid]/attr/socketcreate(since Linux 2.6.18)
如果进程将安全上下文写入此文件,则所有随后创建的套接字都将使用该上下文标记。
- /proc/[pid]/autogroup(since Linux 2.6.38)
参见sched(7)。
- /proc/[pid]/auxv(since 2.6.0)
它包含在执行时传递给进程的ELF解释器信息的内容。格式是一个无符号长ID,再加上每个条目一个无符号长值。最后一个条目包含两个零。另请参见getauxval(3)。
访问此文件的权限由ptrace访问模式PTRACE_MODE_READ_FSCREDS检查控制;参见ptrace(2)。
- /proc/[pid]/cgroup(since Linux 2.6.24)
参见cgroups(7)。
- /proc/[pid]/clear_refs(since Linux 2.6.22)
这是一个只写文件,只能由进程所有者写入。
可以将以下值写入文件:
- 1 (since Linux 2.6.22)
重置与该进程关联的所有页面的PG_Referenced和ACCESSED / YOUNG位。 (在内核2.6.32之前,将任何非零值写入此文件都具有此效果。)
- 2 (since Linux 2.6.32)
为与该进程关联的所有匿名页面重置PG_Referenced和ACCESSED / YOUNG位。
- 3 (since Linux 2.6.32)
为与该进程关联的所有文件映射页面重置PG_Referenced和ACCESSED / YOUNG位。
清除PG_Referenced和ACCESSED / YOUNG位可提供一种方法来大致测量一个进程正在使用多少内存。首先检查/ proc / [pid] / smaps中显示的VMA的" Referenced"字段中的值,以了解进程的内存占用量。然后清除PG_Referenced和ACCESSED / YOUNG位,并在某个测量的时间间隔后,再次检查" Referenced"字段中的值,以了解在测量的间隔内该进程的内存占用量的变化。如果只对检查所选映射类型感兴趣,则可以使用值2或3代替1。
可以编写其他值来影响不同的属性:
- 4 (since Linux 3.11)
清除与该进程关联的所有页面的软脏位。检查点还原系统将此文件(与/ proc / [pid] / pagemap一起使用)发现自写入文件/ proc / [pid] / clear_refs以来进程的哪些页面已被弄脏。
- 5 (since Linux 4.0)
将峰值常驻集大小("高水位线")重置为流程的当前常驻集大小值。
除了上面列出的值外,将任何值写入/ proc / [pid] / clear_refs均无效。
仅当启用CONFIG_PROC_PAGE_MONITOR内核配置选项时,才会存在/ proc / [pid] / clear_refs文件。
- /proc/[pid]/cmdline
该只读文件包含该过程的完整命令行,除非该过程是僵尸程序。在后一种情况下,该文件中没有任何内容:也就是说,对该文件的读取将返回0个字符。命令行参数在此文件中显示为一组由空字节(aq \ 0aq)分隔的字符串,在最后一个字符串之后还有一个空字节。
如果在execve(2)之后,该进程修改了其argv字符串,则这些更改将显示在此处。这与修改argv数组不同。
此外,进程可能会通过诸如PR_SET_MM_ARG_START之类的prctl(2)操作更改此文件引用的存储位置。
将此文件视为进程希望您看到的命令行。
- /proc/[pid]/comm(since Linux 2.6.33)
该文件公开了进程的comm值-即与该进程关联的命令名称。同一进程中的不同线程可能具有不同的comm值,可通过/ proc / [pid] / task / [tid] / comm访问。线程可以通过写入文件/ proc / self / task / [tid] / comm来修改其comm值,或同一线程组中任何其他线程的comm值(请参见clone(2)中对CLONE_THREAD的讨论)。 。长度超过TASK_COMM_LEN(16)个字符(包括终止空字节)的字符串将被静默截断。
该文件提供了prctl(2)PR_SET_NAME和PR_GET_NAME操作的超集,当用于重命名调用方以外的线程时,pthread_setname_np(3)将使用该文件。该文件中的值用于/ proc / sys / kernel / core_pattern中的%e说明符;参见core(5)。
- /proc/[pid]/coredump_filter(since Linux 2.6.23)
参见core(5)。
- /proc/[pid]/cpuset(since Linux 2.6.12)
参见cpuset(7)。
- /proc/[pid]/cwd
这是指向该进程当前工作目录的符号链接。例如,要查找进程20的当前工作目录,可以执行以下操作:
$ cd /proc/20/cwd; pwd -P
在多线程进程中,如果主线程已经终止(通常通过调用pthread_exit(3)),则此符号链接的内容不可用。
解除引用或读取(readlink(2))此符号链接的权限由ptrace访问模式PTRACE_MODE_READ_FSCREDS检查控制;参见ptrace(2)。
- /proc/[pid]/environ
该文件包含通过execve(2)启动当前正在执行的程序时设置的初始环境。条目之间用空字节(aq \ 0aq)分隔,并且末尾可能会有一个空字节。因此,要打印出流程1的环境,您可以执行以下操作:
$ cat /proc/1/environ | tr aq
$ foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...
0aq aq\naq如果在execve(2)之后该进程修改了其环境(例如,通过调用诸如putenv(3)之类的函数或直接修改environ(7)变量),则此文件将不会反映这些更改。
此外,进程可能会通过prctl(2)操作(例如PR_SET_MM_ENV_START)来更改此文件引用的存储位置。
访问此文件的权限由ptrace访问模式PTRACE_MODE_READ_FSCREDS检查控制;参见ptrace(2)。
- /proc/[pid]/exe
在Linux 2.2及更高版本中,此文件是一个符号链接,其中包含已执行命令的实际路径名。可以正常取消引用此符号链接。尝试将其打开将打开可执行文件。您甚至可以键入/ proc / [pid] / exe来运行由进程[pid]运行的同一可执行文件的另一个副本。如果路径名已取消链接,则符号链接将包含附加到原始路径名后的字符串aq(deleted)aq。在多线程进程中,如果主线程已经终止(通常通过调用pthread_exit(3)),则此符号链接的内容不可用。
解除引用或读取(readlink(2))此符号链接的权限由ptrace访问模式PTRACE_MODE_READ_FSCREDS检查控制;参见ptrace(2)。
在Linux 2.0和更早版本中,/ proc / [pid] / exe是指向已执行的二进制文件的指针,并显示为符号链接。在Linux 2.0下对该文件的readlink(2)调用返回以下格式的字符串:
[设备]:inode
例如,[0301]:1502将是设备主03(IDE,MFM等驱动器)次01(第一个驱动器上的第一个分区)上的inode 1502。
带有-inum选项的find(1)可用于定位文件。
- /proc/[pid]/fd/
这是一个子目录,其中包含该进程打开的每个文件的一个条目,该条目由其文件描述符命名,并且是指向实际文件的符号链接。因此,0是标准输入,1是标准输出,2是标准错误,依此类推。
对于管道和套接字的文件描述符,条目将是符号链接,其内容是带有inode的文件类型。对该文件的readlink(2)调用返回以下格式的字符串:
类型:[inode]
例如,socket:[2248868]将是一个套接字,其inode为2248868。对于套接字,该inode可用于在/ proc / net /下的文件之一中查找更多信息。
对于没有相应索引节点的文件描述符(例如,bpf(2),epoll_create(2),eventfd(2),inotify_init(2),perf_event_open(2),signalfd(2),timerfd_create(2)生成的文件描述符),和userfaultfd(2)),则该条目将是具有以下内容的符号链接:
anon_inode:
在许多情况下(但不是全部),文件类型被方括号括起来。
例如,一个epoll文件描述符将具有一个符号链接,其内容为字符串anon_inode:[eventpoll]。
在多线程进程中,如果主线程已经终止(通常通过调用pthread_exit(3)),则此目录的内容不可用。
将文件名用作命令行参数,但如果未提供参数则不从标准输入中获取输入的程序,以及写入名为命令行参数的文件但不将其输出发送到如果未提供任何参数,则使用标准输出,但是仍可以通过使用/ proc / [pid] / fd文件作为命令行参数来使用标准输入或标准输出。例如,假设-i是指定输入文件的标志,而-o是指定输出文件的标志:
$ foobar -i /dev/stdin -o /dev/stdout ...
并且您有一个有效的过滤器。
在某些UNIX和类似UNIX的系统中,/ proc / self / fd / N与/ dev / fd / N大致相同。实际上,大多数Linux MAKEDEV脚本都将/ dev / fd符号链接到/ proc / self / fd。
大多数系统提供符号链接/ dev / stdin,/ dev / stdout和/ dev / stderr,它们分别链接到/ proc / self / fd中的文件0、1和2。因此,上面的示例命令可以写为:
$ echo test | sudo -u nobody cat test $ echo test | sudo -u nobody cat /proc/self/fd/0 cat: /proc/self/fd/0: Permission denied
取消引用或读取(readlink(2))此目录中的符号链接的权限由ptrace访问模式PTRACE_MODE_READ_FSCREDS检查控制;参见ptrace(2)。
请注意,对于引用inode的文件描述符(管道和套接字,请参见上文),这些inode仍然具有与/ proc / [pid] / fd条目不同的许可权位和所有权信息,并且所有者可能与用户不同和该进程的组ID。无特权的进程可能缺少打开它们的权限,如以下示例所示:
$ cat /proc/12015/fdinfo/4 pos: 1000 flags: 01002002 mnt_id: 21
文件描述符0指的是由外壳程序创建并且由该外壳程序用户拥有的管道,它不是没人,因此cat没有权限创建新文件描述符以从该inode读取,即使它仍然可以从其现有节点中读取文件描述符0。
- /proc/[pid]/fdinfo/(since Linux 2.6.22)
这是一个子目录,其中包含该进程打开的每个文件的一个条目,该条目由其文件描述符命名。该目录中的文件仅由进程所有者读取。可以读取每个文件的内容以获得有关相应文件描述符的信息。内容取决于相应文件描述符所引用的文件类型。
对于常规文件和目录,我们看到类似以下内容:
pos: 0 flags: 02 mnt_id: 10 eventfd-count: 40
字段如下:
- pos
这是一个十进制数字,显示文件偏移量。
- flags
这是一个八进制数字,显示文件访问模式和文件状态标志(请参阅open(2))。如果设置了执行时关闭文件描述符标志,则标志还将包含值O_CLOEXEC。
在Linux 3.1之前,此字段错误地显示了打开文件时的O_CLOEXEC设置,而不是close-on-exec标志的当前设置。
- mnt_id
从Linux 3.15开始出现的该字段是包含此文件的安装点的ID。请参见/ proc / [pid] / mountinfo的描述。
对于eventfd文件描述符(请参阅eventfd(2)),我们看到(自Linux 3.8起)以下字段:
pos: 0 flags: 02 mnt_id: 10 tfd: 9 events: 19 data: 74253d2500000009 tfd: 7 events: 19 data: 74253d2500000007
eventfd-count是eventfd计数器的当前值,以十六进制表示。
对于epoll文件描述符(请参阅epoll(7)),我们看到(自Linux 3.8起)以下字段:
pos: 0 flags: 02 mnt_id: 10 sigmask: 0000000000000006
tfd开头的每一行都描述了一个通过epoll文件描述符监视的文件描述符(有关某些详细信息,请参阅epoll_ctl(2))。 tfd字段是文件描述符的编号。事件字段是为此文件描述符监视的事件的十六进制掩码。数据字段是与此文件描述符关联的数据值。
对于signalfd文件描述符(请参阅signalfd(2)),我们看到(自Linux 3.8起)以下字段:
pos: 0 flags: 00 mnt_id: 11 inotify wd:2 ino:7ef82a sdev:800001 mask:800afff ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:2af87e00220ffd73 inotify wd:1 ino:192627 sdev:800001 mask:800afff ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:27261900802dfd73
sigmask是通过此signalfd文件描述符接受的信号的十六进制掩码。 (在此示例中,设置了与信号SIGINT和SIGQUIT对应的位2和3;请参见signal(7)。)
对于inotify文件描述符(请参阅inotify(7)),我们看到(自Linux 3.8起)以下字段:
pos: 0 flags: 02 mnt_id: 11 fanotify flags:0 event-flags:88002 fanotify ino:19264f sdev:800001 mflags:0 mask:1 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:4f261900a82dfd73
以" inotify"开头的每一行均显示有关正在监视的一个文件或目录的信息。此行中的字段如下:
- wd
监视描述符编号(十进制)。
- ino
目标文件的索引节点号(十六进制)。
- sdev
目标文件所在设备的ID(十六进制)。
- mask
为目标文件监视的事件掩码(十六进制)。
如果内核是使用exportfs支持构建的,则通过三个十六进制字段将目标文件的路径公开为文件句柄:fhandle-bytes,fhandle-type和f_handle。
对于fanotify文件描述符(请参阅fanotify(7)),我们看到(自Linux 3.8起)以下字段:
pos: 0 flags: 02004002 mnt_id: 13 clockid: 0 ticks: 0 settime flags: 03 it_value: (7695568592, 640020877) it_interval: (0, 0)
- The fourth line displays information defined when the fanotify group
was created via
fanotify_init(2):
- flags
赋予fanotify_init(2)的flags参数(以十六进制表示)。
- event-flags
赋予fanotify_init(2)的event_f_flags参数(以十六进制表示)。
文件中显示的每一行都包含有关fanotify组中标记之一的信息。这些字段大多数与inotify相同,除了:
- mflags
与标记关联的标志(以十六进制表示)。
- mask
此标记的事件掩码(以十六进制表示)。
- ignored_mask
此标记被忽略的事件的掩码(以十六进制表示)。
有关这些字段的详细信息,请参见fanotify_mark(2)。
对于timerfd文件描述符(请参见timerfd(2)),我们看到(自Linux 3.17开始)以下字段:
# cat /proc/3828/io rchar: 323934931 wchar: 323929600 syscr: 632687 syscw: 632675 read_bytes: 0 write_bytes: 323932160 cancelled_write_bytes: 0
- clockid
这是时钟ID的数字值(对应于通过定义的CLOCK_ *常量之一),用于标记计时器的进度(在此示例中,0为CLOCK_REALTIME)。
- ticks
这是已发生的计时器到期次数(即,其上的read(2)会返回的值)。
- settime flags
该字段以八进制形式列出了上次配置timerfd的标志(请参见timerfd_settime(2))(在此示例中,同时设置了TFD_TIMER_ABSTIME和TFD_TIMER_CANCEL_ON_SET)。
- it_value
此字段包含直到下一次计时器到期的时间量,以秒和纳秒为单位。无论是否使用TFD_TIMER_ABSTIME标志创建了计时器,始终将其表示为相对值。
- it_interval
此字段包含计时器的时间间隔(以秒和纳秒为单位)。 (it_value和it_interval字段包含此文件描述符上的timerfd_gettime(2)将返回的值。)
- /proc/[pid]/gid_map(since Linux 3.5)
参见user_namespaces(7)。
- /proc/[pid]/io(since kernel 2.6.20)
该文件包含该过程的I / O统计信息,例如:
# ls -l /proc/self/map_files/ lr--------. 1 root root 64 Apr 16 21:31 3252e00000-3252e20000 -> /usr/lib64/ld-2.15.so ...
字段如下:
- rchar: characters read
导致此任务从存储中读取的字节数。这只是该过程传递给read(2)和类似系统调用的字节总和。它包括诸如终端I / O之类的内容,并且不受是否需要实际的物理磁盘I / O的影响(可能已从页面缓存中满足读取要求)。
- wchar: characters written
此任务已导致或应导致将其写入磁盘的字节数。与rchar相似的警告也适用于此。
- syscr: read syscalls
- syscw: write syscalls
- read_bytes: bytes read
尝试计算此过程确实导致从存储层获取的字节数。这对于支持块的文件系统是准确的。
- write_bytes: bytes written
尝试计算此过程导致发送到存储层的字节数。
- cancelled_write_bytes:
这里最大的错误是截断。如果某个进程将1 MB写入文件,然后删除该文件,则实际上不会执行任何写出操作。但这将导致1 MB的写入。换句话说:该字段表示通过截断页面缓存而导致此过程未发生的字节数。任务也可能导致"负" I / O。如果此任务截断了一些脏的页面缓存,则不会发生已经考虑了另一个任务的某些I / O(以其write_bytes为单位)。
注意:在当前的实现中,在32位系统上有点麻烦:如果进程A读取进程B的/ proc / [pid] / io,而进程B正在更新这些64位计数器之一,则进程A会看到中间结果。
访问此文件的权限由ptrace访问模式PTRACE_MODE_READ_FSCREDS检查控制;参见ptrace(2)。
- /proc/[pid]/limits(since Linux 2.6.24)
该文件显示每个进程的资源限制的软限制,硬限制和度量单位(请参阅getrlimit(2))。在Linux 2.6.35(含)之前,该文件受保护以允许仅由进程的实际UID进行读取。从Linux 2.6.36开始,系统上的所有用户均可读取此文件。
- /proc/[pid]/map_files/(since kernel 3.3)
该子目录包含对应于内存映射文件的条目(请参见mmap(2))。条目由存储区开始和结束地址对(以十六进制数字表示)命名,并且是指向映射文件本身的符号链接。这是一个示例,将输出打包并重新格式化以适合80列显示:
lrw-------. 1 root root 64 Apr 16 21:33 7fc075d2f000-7fc075e6f000 -> /dev/zero (deleted)
尽管这些条目存在于使用MAP_FILE标志映射的内存区域中,但是在Linux中实现匿名共享内存(使用MAP_ANON | MAP_SHARED标志创建的区域)的方式意味着此类区域也将出现在此目录中。这是一个示例,其中目标文件是已删除的/ dev /零:
address perms offset dev inode pathname 00400000-00452000 r-xp 00000000 08:02 173521 /usr/bin/dbus-daemon 00651000-00652000 r--p 00051000 08:02 173521 /usr/bin/dbus-daemon 00652000-00655000 rw-p 00052000 08:02 173521 /usr/bin/dbus-daemon 00e03000-00e24000 rw-p 00000000 00:00 0 [heap] 00e24000-011f7000 rw-p 00000000 00:00 0 [heap] ... 35b1800000-35b1820000 r-xp 00000000 08:02 135522 /usr/lib64/ld-2.15.so 35b1a1f000-35b1a20000 r--p 0001f000 08:02 135522 /usr/lib64/ld-2.15.so 35b1a20000-35b1a21000 rw-p 00020000 08:02 135522 /usr/lib64/ld-2.15.so 35b1a21000-35b1a22000 rw-p 00000000 00:00 0 35b1c00000-35b1dac000 r-xp 00000000 08:02 135870 /usr/lib64/libc-2.15.so 35b1dac000-35b1fac000 ---p 001ac000 08:02 135870 /usr/lib64/libc-2.15.so 35b1fac000-35b1fb0000 r--p 001ac000 08:02 135870 /usr/lib64/libc-2.15.so 35b1fb0000-35b1fb2000 rw-p 001b0000 08:02 135870 /usr/lib64/libc-2.15.so ... f2c6ff8c000-7f2c7078c000 rw-p 00000000 00:00 0 [stack:986] ... 7fffb2c0d000-7fffb2c2e000 rw-p 00000000 00:00 0 [stack] 7fffb2d48000-7fffb2d49000 r-xp 00000000 00:00 0 [vdso]
访问此文件的权限由ptrace访问模式PTRACE_MODE_READ_FSCREDS检查控制;参见ptrace(2)。
在内核版本4.3之前,仅当启用CONFIG_CHECKPOINT_RESTORE内核配置选项时,此目录才会出现。此外,在那些内核版本中,需要特权(CAP_SYS_ADMIN)才能查看此目录的内容。
- /proc/[pid]/maps
包含当前映射的内存区域及其访问权限的文件。有关内存映射的更多信息,请参见mmap(2)。
访问此文件的权限由ptrace访问模式PTRACE_MODE_READ_FSCREDS检查控制;参见ptrace(2)。
该文件的格式为:
r = read w = write x = execute s = shared p = private (copy on write)
地址字段是映射所占用的过程中的地址空间。 perms字段是一组权限:
36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue (1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
offset字段是文件/其他文件的偏移量; dev是设备(主要:次要); inode是该设备上的inode。 0表示没有索引节点与存储区域相关联,就像BSS(未初始化的数据)一样。
路径名字段通常将是支持映射的文件。对于ELF文件,您可以通过查看ELF程序标头(readelf -l)中的Offset字段轻松地与offset字段进行协调。
还有其他有用的伪路径:
- [stack]
初始进程(也称为主线程)的堆栈。
- [stack:<tid>](from Linux 3.4 to 4.4)
线程的堆栈(其中是线程ID)。它对应于/ proc / [pid] / task / [tid] /路径。在Linux 4.5中已删除了该字段,因为为具有大量线程的进程提供此信息非常昂贵。
- [vdso]
虚拟动态链接的共享对象。参见vdso(7)。
- [heap]
进程的堆。
如果路径名字段为空,则这是通过mmap(2)获得的匿名映射。没有简单的方法可以将其协调回进程的源,除非通过gdb(1),strace(1)或类似程序来运行它。
除换行符外,路径名显示为未转义,换行符替换为八进制转义序列。结果,无法确定原始路径名是否包含换行符或文字\ 012字符序列。
如果映射是文件支持的,并且文件已被删除,则在路径名后附加字符串"(已删除)"。注意这也是模棱两可的。
在Linux 2.0下,没有提供路径名的字段。
- /proc/[pid]/mem
访问此文件的权限由ptrace访问模式PTRACE_MODE_ATTACH_FSCREDS检查控制;参见ptrace(2)。
- /proc/[pid]/mountinfo(since Linux 2.6.26)
该文件包含有关进程的安装名称空间中的安装点的信息(请参见mount_namespaces(7))。它提供了(旧)/ proc / [pid] / mounts文件中缺少的各种信息(例如,传播状态,绑定安装的安装根目录,每个安装及其父代的标识符),并解决了其他各种问题文件(例如,不可扩展性,无法区分每个安装选项与每个超级块选项)。
该文件包含以下形式的行:
device /dev/sda7 mounted on /home with fstype ext3 [stats] ( 1 ) ( 2 ) (3 ) ( 4 )
括号中的数字是下面描述的标签:
- (1)
装载ID:装载的唯一ID(可在umount(2)之后重用)。
- (2)
parent ID:父挂载的ID(或该挂载命名空间的挂载树的根的self的ID)。
如果在路径名P上将新安装架堆叠在先前的现有安装架上(以便隐藏现有安装架),则新安装架的父级是该位置的先前安装架。因此,当查看堆叠在特定位置的所有安装座时,最顶部的安装座不是同一位置上任何其他安装座的父安装座。 (但是,请注意,只有当作为装载点的P的最长路径子前缀本身未被堆叠的装载隐藏时,才可以访问此最顶部的装载。)
如果父挂载点位于进程的根目录之外(请参阅chroot(2)),则此处显示的ID在mountinfo中不会具有其挂载ID(字段1)与该父挂载ID匹配的对应记录(因为位于进程的根目录之外的文件不会显示在mountinfo中)。作为这一点的一种特殊情况,该进程的根挂载点可能具有位于该进程的根目录之外的父挂载(用于initramfs文件系统),并且该挂载点的条目不会出现在mountinfo中。
- (3)
major:minor:此文件系统上文件的st_dev值(请参见stat(2))。
- (4)
root:文件系统中目录的路径名,该目录构成此安装的根目录。
- (5)
挂载点:相对于进程根目录的挂载点的路径名。
- (6)
安装选项:每个安装选项(请参阅mount(2))。
- (7)
可选字段:零个或多个" tag [:value]"形式的字段;见下文。
- (8)
分隔符:可选字段的末尾用单个连字符标记。
- (9)
文件系统类型:文件系统类型,格式为" type [.subtype]"。
- (10)
挂载源:文件系统特定的信息或"无"。
- (11)
超级选项:每个超级块选项(请参阅mount(2))。
当前,可能的可选字段是shared,master,propagate_from和unbindable。有关这些字段的描述,请参见mount_namespaces(7)。解析器应忽略所有无法识别的可选字段。
有关挂载传播的更多信息,请参见:Linux内核源代码树中的Documentation / filesystems / sharedsubtree.txt。
- /proc/[pid]/mounts(since Linux 2.4.19)
该文件列出了当前在进程的安装名称空间中安装的所有文件系统(请参见mount_namespaces(7))。该文件的格式记录在fstab(5)中。
从内核版本2.6.15开始,此文件是可轮询的:打开文件进行读取后,此文件中的更改(即文件系统安装或卸载)导致select(2)将文件描述符标记为具有异常情况,并且poll(2)和epoll_wait(2)将文件标记为具有优先级事件(POLLPRI)。 (在Linux 2.6.30之前,此文件中的更改由文件描述符标记为select(2)可读,并标记为poll(2)和epoll_wait(2)具有错误条件来指示。)
- /proc/[pid]/mountstats(since Linux 2.6.17)
该文件导出有关进程的安装名称空间中的安装点的信息(统计信息,配置信息)(请参见mount_namespaces(7))。此文件中的行格式为:
$ PS1='sh1# ' unshare -Urnm sh1# mount -t tmpfs tmpfs /etc # Mount empty tmpfs at /etc sh1# mount --bind /usr /dev # Mount /usr at /dev sh1# echo $$ 27123
每行中的字段是:
- (1)
挂载设备的名称(如果没有相应的设备,则为" nodevice")。
- (2)
文件系统树中的安装点。
- (3)
文件系统类型。
- (4)
可选的统计信息和配置信息。当前(从Linux 2.6.26开始),只有NFS文件系统通过此字段导出信息。
该文件仅由进程的所有者读取。
- /proc/[pid]/net(since Linux 2.6.25)
请参阅/ proc / net的描述。
- /proc/[pid]/ns/(since Linux 3.0)
这是一个子目录,每个子目录包含一个条目,该条目支持由setns(2)操纵。有关更多信息,请参见namespaces(7)。
- /proc/[pid]/numa_maps(since Linux 2.6.14)
参见numa(7)。
- /proc/[pid]/oom_adj(since Linux 2.6.11)
此文件可用于调整分数,该分数用于选择在内存不足(OOM)情况下应终止哪个进程。内核使用该值对进程的oom_score值进行位移操作:有效值的范围是-16至+15,加上特殊值-17,这将完全禁用此进程的OOM杀死功能。积极的分数会增加这一过程被OOM杀手杀死的可能性;负分数会降低可能性。
该文件的默认值为0;默认值为0。新进程将继承其父级的oom_adj设置。必须授予一个进程特权(CAP_SYS_RESOURCE)以更新此文件。
从Linux 2.6.36开始,不推荐使用此文件,而推荐使用/ proc / [pid] / oom_score_adj。
- /proc/[pid]/oom_score(since Linux 2.6.11)
此文件显示内核为此进程提供的当前分数,以选择OOM杀手的进程。较高的分数意味着该过程更可能由OOM杀手选择。该分数的基础是该进程使用的内存量,对于以下因素,其增加(+)或减少(-):
- *
该进程是否具有特权(-)。
在内核2.6.36之前,以下因素也用于计算oom_score:
- *
该过程是否使用fork(2)(+)创建了很多子代;
- *
该进程是否已运行很长时间,或是否已使用大量CPU时间(-);
- *
该过程的值是否低(即> 0)(+);和
- *
该进程是否直接进行硬件访问(-)。
oom_score还反映了该进程的oom_score_adj或oom_adj设置所指定的调整。
- /proc/[pid]/oom_score_adj(since Linux 2.6.36)
该文件可用于调整不良启发式,用于选择在内存不足的情况下杀死哪个进程。
不良启发式方法会为每个候选任务分配一个值,范围从0(从不杀死)到1000(始终被杀死),以确定目标进程。这些单元沿着其当前内存和交换使用的估计,大致是该进程可以从其分配的允许内存范围内的比例。例如,如果一个任务正在使用所有允许的内存,则其不良得分将为1000。如果它使用了其允许的内存的一半,则其得分将为500。
不良评分中还包含一个附加因素:与其他任务相比,根进程的内存增加了3%。
"允许"内存的数量取决于调用OOM杀手的上下文。如果是由于分配给分配任务的cpuset的内存已用尽,则允许的内存代表分配给该cpuset的一组内存(请参阅cpuset(7))。如果是由于内存节点耗尽,则允许的内存代表内存节点集。如果是由于达到内存限制(或交换限制),则允许的内存就是配置的限制。最后,如果是由于整个系统内存不足,则允许的内存代表所有可分配的资源。
在将oom_score_adj的值用于确定要杀死的任务之前,将其添加到不良评分。可接受的值范围为-1000(OOM_SCORE_ADJ_MIN)至+1000(OOM_SCORE_ADJ_MAX)。这样一来,用户空间就可以控制对OOM杀死的偏好,从始终偏爱特定任务或完全禁用OOM杀死。最低可能值-1000等效于完全禁用该任务的OOM杀死,因为它始终报告不良得分为0。
因此,对于用户空间而言,为每个任务定义要考虑的内存量非常简单。例如,将oom_score_adj值设置为+500,大约等效于允许其余任务共享同一系统,cpuset,内存或内存控制器资源,以使用至少50%的内存。另一方面,值-500大约等于将任务允许的内存的50%减去对任务的评分。
为了与以前的内核向后兼容,仍可以使用/ proc / [pid] / oom_adj调整不良分数。其值使用oom_score_adj线性缩放。
写入/ proc / [pid] / oom_score_adj或/ proc / [pid] / oom_adj将改变其缩放值。
choom(1)程序提供了一个命令行界面,用于调整正在运行的进程或新执行的命令的oom_score_adj值。
- /proc/[pid]/pagemap(since Linux 2.6.25)
该文件显示了流程的每个虚拟页面到物理页面框架或交换区域的映射。它为每个虚拟页面包含一个64位值,其位设置如下:
- 63
如果设置,则页面存在于RAM中。
- 62
如果设置,则页面位于交换空间中
- 61 (since Linux 3.5)
该页面是文件映射页面或共享匿名页面。
- 60-57 (since Linux 3.11)
0
- 56 (since Linux 4.2)
该页面是唯一映射的。
- 55 (since Linux 3.11)
PTE是软脏的(请参阅内核源文件Documentation / admin-guide / mm / soft-dirty.rst)。
- 54-0
如果页面存在于RAM中(位63),则这些位提供页面帧号,可用于索引/ proc / kpageflags和/ proc / kpagecount。如果页面存在于交换中(位62),则位4-0给出交换类型,而位54-5编码交换偏移量。
在Linux 3.11之前,位60-55用于编码页面大小的以2为底的对数。
为了有效地使用/ proc / [pid] / pagemap,请使用/ proc / [pid] / maps确定实际映射了哪些内存区域,并试图跳过未映射的区域。
仅当启用CONFIG_PROC_PAGE_MONITOR内核配置选项时,/ proc / [pid] / pagemap文件才存在。
访问此文件的权限由ptrace访问模式PTRACE_MODE_READ_FSCREDS检查控制;参见ptrace(2)。
- /proc/[pid]/personality(since Linux 2.6.28)
该只读文件公开了由personality(2)设置的流程的执行域。该值以十六进制表示。
访问此文件的权限由ptrace访问模式PTRACE_MODE_ATTACH_FSCREDS检查控制;参见ptrace(2)。
- /proc/[pid]/root
UNIX和Linux支持通过chroot(2)系统调用设置的文件系统的按进程根目录的想法。该文件是指向进程根目录的符号链接,其行为与exe和fd / *相同。
但是请注意,此文件不仅仅是符号链接。它提供与进程本身相同的文件系统视图(包括名称空间和每个进程的安装集)。一个例子说明了这一点。在一个终端中,我们在新用户和安装名称空间中启动一个外壳,然后在该外壳中创建一些新的安装点:
$ PS1='sh2# ' sudo sh sh2# ls /etc | wc -l # In initial NS 309 sh2# ls /proc/27123/root/etc | wc -l # /etc in other NS 0 # The empty tmpfs dir sh2# ls /dev | wc -l # In initial NS 205 sh2# ls /proc/27123/root/dev | wc -l # /dev in other NS 11 # Actually bind # mounted to /usr sh2# ls /usr | wc -l # /usr in initial NS 11
在第二个终端窗口中,在初始安装名称空间中,我们查看初始和新名称空间中相应安装的内容:
00400000-0048a000 r-xp 00000000 fd:03 960637 /bin/bash Size: 552 kB Rss: 460 kB Pss: 100 kB Shared_Clean: 452 kB Shared_Dirty: 0 kB Private_Clean: 8 kB Private_Dirty: 0 kB Referenced: 460 kB Anonymous: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB ProtectionKey: 0 VmFlags: rd ex mr mw me dw
在多线程进程中,如果主线程已经终止(通常通过调用pthread_exit(3)),则/ proc / [pid] / root符号链接的内容不可用。
解除引用或读取(readlink(2))此符号链接的权限由ptrace访问模式PTRACE_MODE_READ_FSCREDS检查控制;参见ptrace(2)。
- /proc/[pid]/seccomp(Linux 2.6.12 to 2.6.22)
该文件可用于读取和更改进程的安全计算(seccomp)模式设置。如果进程不在seccomp模式下,则其值为0;如果进程在严格seccomp模式下,则其值为1(请参见seccomp(2))。向此文件写入1将使进程不可逆地进入严格的seccomp模式。 (进一步尝试写入文件失败,并显示EPERM错误。)
在Linux 2.6.23中,该文件消失了,将由prctl(2)PR_GET_SECCOMP和PR_SET_SECCOMP操作(以及后来由seccomp(2)和/ proc / [pid] / status中的Seccomp字段替换)代替。
- /proc/[pid]/setgroups(since Linux 3.19)
参见user_namespaces(7)。
- /proc/[pid]/smaps(since Linux 2.6.14)
该文件显示了每个进程映射的内存消耗。 (pmap(1)命令以更易于解析的形式显示类似的信息。)对于每个映射,都有一系列的行,例如:
size (1) total program size (same as VmSize in /proc/[pid]/status) resident (2) resident set size (same as VmRSS in /proc/[pid]/status) shared (3) number of resident shared pages (i.e., backed by a file) (same as RssFile+RssShmem in /proc/[pid]/status) text (4) text (code) lib (5) library (unused since Linux 2.6; always 0) data (6) data + stack dt (7) dirty pages (unused since Linux 2.6; always 0)
这些行的第一行显示的信息与/ proc / [pid] / maps中的映射显示的信息相同。以下各行显示了映射的大小,RAM中当前驻留的映射数量(" Rss"),进程对此映射的比例份额(" Pss"),映射以及映射中干净的和脏的私有页面的数量。 "已引用"表示当前标记为已引用或已访问的内存量。 "匿名"显示不属于任何文件的内存量。 "交换"显示还使用了多少本应匿名存储,但在交换时已用完。
" KernelPageSize"行(自Linux 2.6.29起可用)是内核用于备份虚拟内存区域的页面大小。在大多数情况下,这与MMU使用的大小相匹配。但是,一个反例发生在PPC64内核上,因此使用64 kB作为基本页面大小的内核在较旧的处理器上仍可以将4 kB页面用于MMU。为了区分这两个属性," MMUPageSize"行(从Linux 2.6.29开始也可用)报告MMU使用的页面大小。
"已锁定"指示映射是否已锁定在内存中。
" ProtectionKey"行(自Linux 4.9起,仅在x86上可用)包含与虚拟内存区域关联的内存保护密钥(请参阅pkeys(7))。仅当内核是使用CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS配置选项构建的时,此条目才存在。
" VmFlags"行(从Linux 3.8开始可用)表示与虚拟内存区域关联的内核标志,并使用以下两个字母的代码进行编码:
rd-可读
wr-可写
ex-可执行的
sh-分享
mr-可能会读
mw-可能会写
me-可能会执行
ms-可能共享
gd-堆栈段向下增长
pf-纯PFN范围
dw-禁用写入映射文件
lo-页面被锁定在内存中
io-内存映射的I / O区域
sr-提供顺序阅读建议
rr-提供随机阅读建议
DC-不要在fork上复制区域
de-请勿在重新映射时扩展区域
ac-area is accountable
nr-不会为该区域保留交换空间
ht-区域使用巨大的tlb页面
sf-执行同步页面故障(自Linux 4.15起)
nl-非线性映射(在Linux 4.0中已删除)
ar-特定于体系结构的标志
wf-在叉子上擦拭(自Linux 4.14起)
dd-不将区域包括到核心转储中
sd-软脏标志(自Linux 3.13起)
mm-混合地图区域
hg-巨大的页面建议标记
nh-无大页面建议标志
mg-可合并建议标记
um-userfaultfd缺少页面跟踪(自Linux 4.3起)
uw-userfaultfd wprotect页面跟踪(自Linux 4.3起)" ProtectionKey"字段包含与虚拟内存区域关联的内存保护密钥(请参阅pkeys(7))。仅当内核使用CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS配置选项构建时才存在。 (从Linux 4.6开始)
仅当启用CONFIG_PROC_PAGE_MONITOR内核配置选项时,才会存在/ proc / [pid] / smaps文件。
- /proc/[pid]/stack(since Linux 2.6.29)
该文件提供了此进程的内核堆栈中函数调用的符号跟踪。仅当内核是使用CONFIG_STACKTRACE配置选项构建的时才提供此文件。
访问此文件的权限由ptrace访问模式PTRACE_MODE_ATTACH_FSCREDS检查控制;参见ptrace(2)。
- /proc/[pid]/stat
有关进程的状态信息。 ps(1)使用它。它在内核源文件fs / proc / array.c中定义。
- The fields, in order, with their proper
scanf(3)
format specifiers, are listed below.
Whether or not certain of these fields display valid information is governed by
a ptrace access mode
PTRACE_MODE_READ_FSCREDS| PTRACE_MODE_NOAUDITcheck (refer to
ptrace(2)).If the check denies access, then the field value is displayed as 0.
The affected fields are indicated with the marking [PT].- (1) pid%d
进程ID。
- (2) comm%s
可执行文件的文件名,用括号括起来。长度超过TASK_COMM_LEN(16)个字符(包括终止空字节)的字符串将被静默截断。可见可执行文件是否已换出。
- (3) state%c
以下字符之一,指示进程状态:
- R
运行
- S
睡在一个可中断的等待中
- D
等待不间断的磁盘睡眠
- Z
僵尸
- T
已停止(在信号上)或(在Linux 2.6.33之前)跟踪已停止
- t
跟踪停止(Linux 2.6.33及更高版本)
- W
分页(仅在Linux 2.6.0之前)
- X
已停用(从Linux 2.6.0开始)
- x
无效(仅Linux 2.6.33至3.13)
- K
Wakekill(仅Linux 2.6.33至3.13)
- W
正在唤醒(仅适用于Linux 2.6.33至3.13)
- P
停放(仅限Linux 3.9至3.13)
- (4) ppid%d
此过程的父级的PID。
- (5) pgrp%d
进程的进程组ID。
- (6) session%d
进程的会话ID。
- (7) tty_nr%d
过程的控制终端。 (次设备号包含在位31至20和7至0的组合中;主设备号位于15至8位中。)
- (8) tpgid%d
进程控制终端的前台进程组的ID。
- (9) flags%u
内核标记进程字。有关位的含义,请参见Linux内核源文件include / linux / sched.h中的PF_ *定义。详细信息取决于内核版本。
在Linux 2.6之前,此字段的格式为%lu。
- (10) minflt%lu
进程造成的一些次要故障,不需要从磁盘加载内存页。
- (11) cminflt%lu
进程的等待子进程造成的次要故障数。
- (12) majflt%lu
进程所造成的主要故障数,需要从磁盘加载内存页。
- (13) cmajflt%lu
进程等待的孩子造成的主要故障数。
- (14) utime%lu
在用户模式下已计划此过程的时间,以时钟滴答数为单位(除以sysconf(_SC_CLK_TCK))。这包括来宾时间guest_time(运行虚拟CPU所花费的时间,请参见下文),以便不了解来宾时间字段的应用程序不会因计算而浪费时间。
- (15) stime%lu
在内核模式下已调度此过程的时间,以时钟滴答数为单位(除以sysconf(_SC_CLK_TCK))。
- (16) cutime%ld
已在用户模式下调度了此进程的等待子项的时间,以时钟滴答数为单位(除以sysconf(_SC_CLK_TCK))。 (另请参见times(2)。)这包括来宾时间cguest_time(运行虚拟CPU所花费的时间,请参见下文)。
- (17) cstime%ld
已在内核模式下调度了此进程的等待子进程的时间,以时钟滴答数为单位(除以sysconf(_SC_CLK_TCK))。
- (18) priority%ld
(对于Linux 2.6的说明)对于运行实时调度策略的进程(以下策略;请参阅sched_setscheduler(2)),这是否定的调度优先级减一;也就是说,该数字在-2到-100范围内,对应于实时优先级1到99。对于在非实时调度策略下运行的进程,这是原始的nice值(setpriority(2))为代表内核。内核将尼斯值存储为介于0(高)到39(低)之间的数字,对应于用户可见的-20到19的尼斯范围。
在Linux 2.6之前,这是基于分配给此过程的调度程序权重的缩放值。
- (19) nice%ld
nice值(请参阅setpriority(2)),该值在19(低优先级)到-20(高优先级)之间。
- (20) num_threads%ld
此过程中的线程数(自Linux 2.6起)。在内核2.6之前,此字段被硬编码为0,作为先前删除的字段的占位符。
- (21) itrealvalue%ld
由于间隔计时器的原因,下一个SIGALRM发送到进程之前的时间为jiffies。从内核2.6.17开始,不再维护该字段,并且将其硬编码为0。
- (22) starttime%llu
系统引导后进程开始的时间。在Linux 2.6之前的内核中,此值以jiffies表示。从Linux 2.6开始,该值以时钟滴答表示(除以sysconf(_SC_CLK_TCK))。
在Linux 2.6之前,此字段的格式为%lu。
- (23) vsize%lu
虚拟内存大小(以字节为单位)。
- (24) rss%ld
常驻集大小:进程在实际内存中具有的页数。这只是计入文本,数据或堆栈空间的页面。这不包括尚未按需加载或换出的页面。
- (25) rsslim%lu
进程rss上的当前软限制(以字节为单位);请参阅getrlimit(2)中对RLIMIT_RSS的描述。
- (26) startcode%lu [PT]
可以在其上运行程序文本的地址。
- (27) endcode%lu [PT]
可以在其下运行程序文本的地址。
- (28) startstack%lu [PT]
堆栈起始地址(即底部)。
- (29) kstkesp%lu [PT]
ESP的当前值(堆栈指针),在进程的内核堆栈页面中找到。
- (30) kstkeip%lu [PT]
当前的EIP(指令指针)。
- (31) signal%lu
未决信号的位图,显示为十进制数。已过时,因为它不提供有关实时信号的信息;使用/ proc / [pid] / status代替。
- (32) blocked%lu
被阻止信号的位图,显示为十进制数。已过时,因为它不提供有关实时信号的信息;使用/ proc / [pid] / status代替。
- (33) sigignore%lu
被忽略信号的位图,显示为十进制数。已过时,因为它不提供有关实时信号的信息;使用/ proc / [pid] / status代替。
- (34) sigcatch%lu
捕获信号的位图,显示为十进制数。已过时,因为它不提供有关实时信号的信息;使用/ proc / [pid] / status代替。
- (35) wchan%lu [PT]
这是进程正在等待的"通道"。它是内核中进程正在休眠的位置的地址。相应的符号名称可以在/ proc / [pid] / wchan中找到。
- (36) nswap%lu
交换的页面数(未维护)。
- (37) cnswap%lu
子进程的累积nswap(未维护)。
- (38) exit_signal%d (since Linux 2.1.22)
我们死后要发送给父母的信号。
- (39) processor%d (since Linux 2.2.8)
最后执行的CPU编号。
- (40) rt_priority%u (since Linux 2.5.19)
实时调度优先级,对于在实时策略下调度的进程,范围为1到99,对于非实时进程为0(请参阅sched_setscheduler(2))。
- (41) policy%u (since Linux 2.5.19)
调度策略(请参阅sched_setscheduler(2))。使用linux / sched.h中的SCHED_ *常量进行解码。
在Linux 2.6.22之前,此字段的格式为%lu。
- (42) delayacct_blkio_ticks%llu (since Linux 2.6.18)
总计的块I / O延迟,以时钟滴答(毫秒)为单位。
- (43) guest_time%lu (since Linux 2.6.24)
进程的来宾时间(为来宾操作系统运行虚拟CPU所花费的时间),以时钟滴答数为单位(除以sysconf(_SC_CLK_TCK))。
- (44) cguest_time%ld (since Linux 2.6.24)
进程的子进程的来宾时间,以时钟滴答数为单位(除以sysconf(_SC_CLK_TCK))。
- (45) start_data%lu (since Linux 3.3) [PT]
地址上方放置了程序的初始化和未初始化(BSS)数据。
- (46) end_data%lu (since Linux 3.3) [PT]
程序初始化和未初始化(BSS)数据放置在其下面的地址。
- (47) start_brk%lu (since Linux 3.3) [PT]
可以使用brk(2)在其上扩展程序堆的地址。
- (48) arg_start%lu (since Linux 3.5) [PT]
程序命令行参数(argv)放置在其上方的地址。
- (49) arg_end%lu (since Linux 3.5) [PT]
放置在程序命令行参数(argv)下面的地址。
- (50) env_start%lu (since Linux 3.5) [PT]
该程序环境所在的地址。
- (51) env_end%lu (since Linux 3.5) [PT]
放置程序环境的地址。
- (52) exit_code%d (since Linux 3.5) [PT]
线程的退出状态,格式为waitpid(2)。
- /proc/[pid]/statm
提供有关内存使用情况的信息,以页为单位。这些列是:
$ cat /proc/$$/status Name: bash Umask: 0022 State: S (sleeping) Tgid: 17248 Ngid: 0 Pid: 17248 PPid: 17200 TracerPid: 0 Uid: 1000 1000 1000 1000 Gid: 100 100 100 100 FDSize: 256 Groups: 16 33 100 NStgid: 17248 NSpid: 17248 NSpgid: 17248 NSsid: 17200 VmPeak: 131168 kB VmSize: 131168 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 13484 kB VmRSS: 13484 kB RssAnon: 10264 kB RssFile: 3220 kB RssShmem: 0 kB VmData: 10332 kB VmStk: 136 kB VmExe: 992 kB VmLib: 2104 kB VmPTE: 76 kB VmPMD: 12 kB VmSwap: 0 kB HugetlbPages: 0 kB # 4.4 CoreDumping: 0 # 4.15 Threads: 1 SigQ: 0/3067 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000010000 SigIgn: 0000000000384004 SigCgt: 000000004b813efb CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: ffffffffffffffff CapAmb: 0000000000000000 NoNewPrivs: 0 Seccomp: 0 Speculation_Store_Bypass: vulnerable Cpus_allowed: 00000001 Cpus_allowed_list: 0 Mems_allowed: 1 Mems_allowed_list: 0 voluntary_ctxt_switches: 150 nonvoluntary_ctxt_switches: 545
- /proc/[pid]/status
以易于人类解析的格式在/ proc / [pid] / stat和/ proc / [pid] / statm中提供许多信息。这是一个例子:
ID: 1 signal: 60/00007fff86e452a8 notify: signal/pid.2634 ClockID: 0 ID: 0 signal: 60/00007fff86e452a8 notify: signal/pid.2634 ClockID: 1
字段如下:
- *
名称:由该进程运行的命令。长度超过TASK_COMM_LEN(16)个字符(包括终止空字节)的字符串将被静默截断。
- *
- *
状态:流程的当前状态。 " R(正在运行)"," S(正在睡眠)"," D(磁盘睡眠)"," T(已停止)"," t(跟踪停止)"," Z(僵尸)"或" X(死)"。
- *
Tgid:线程组ID(即进程ID)。
- *
Ngid:NUMA组ID(如果没有则为0;从Linux 3.13开始)。
- *
Pid:线程ID(请参阅gettid(2))。
- *
PPid:父进程的PID。
- *
TracerPid:跟踪此进程的进程的PID(如果未跟踪,则为0)。
- *
Uid,Gid:真实,有效,保存集和文件系统Uid(GID)。
- *
FDSize:当前分配的文件描述符插槽数。
- *
组:补充组列表。
- *
NStgid:[pid]是成员的每个PID名称空间中的线程组ID(即PID)。最左边的条目显示有关安装此procfs的进程的PID命名空间的值(如果是内核安装,则为根命名空间),然后是相继嵌套的内部命名空间中的值。 (从Linux 4.1开始。)
- *
NSpid:[pid]是成员的每个PID名称空间中的线程ID。字段的顺序与NStgid相同。 (从Linux 4.1开始。)
- *
NSpgid:[pid]是成员的每个PID名称空间中的进程组ID。字段的顺序与NStgid相同。 (从Linux 4.1开始。)
- *
NSsid:后代名称空间会话ID层次结构[pid]是其成员的每个PID名称空间中的会话ID。字段的顺序与NStgid相同。 (从Linux 4.1开始。)
- *
VmPeak:峰值虚拟内存大小。
- *
VmSize:虚拟内存大小。
- *
VmLck:锁定的内存大小(请参阅mlock(2))。
- *
VmPin:固定的内存大小(自Linux 3.2起)。这些页面无法移动,因为某些东西需要直接访问物理内存。
- *
VmHWM:峰值居民集大小("高水位线")。
- *
VmRSS:居民集大小。请注意,这里的值是RssAnon,RssFile和RssShmem的总和。
- *
RssAnon:常驻匿名内存的大小。 (从Linux 4.5开始)。
- *
RssFile:常驻文件映射的大小。 (从Linux 4.5开始)。
- *
RssShmem:常驻共享内存的大小(包括System V共享内存,tmpfs(5)的映射以及共享的匿名映射)。 (从Linux 4.5开始)。
- *
VmData,VmStk,VmExe:数据,堆栈和文本段的大小。
- *
VmLib:共享库代码大小。
- *
VmPTE:页面表条目的大小(从Linux 2.6.10开始)。
- *
VmPMD:二级页表的大小(在Linux 4.0中添加;在Linux 4.15中删除)。
- *
VmSwap:匿名匿名页面交换出的虚拟内存大小;不包括shmem swap使用(自Linux 2.6.34起)。
- *
HugetlbPages:巨大内存部分的大小(自Linux 4.4起)。
- *
CoreDumping:如果进程当前正在转储核心,则包含值1;如果不是,则包含0(自Linux 4.15开始)。监视进程可以使用此信息来避免终止当前正在转储核心的进程,这可能导致核心转储文件损坏。
- *
线程:包含该线程的进程中的线程数。
- *
SigQ:此字段包含两个以斜杠分隔的数字,与该进程的实际用户ID的排队信号有关。其中第一个是此实际用户ID的当前排队信号的数量,第二个是此进程在排队信号的资源上的限制(请参阅getrlimit(2)中对RLIMIT_SIGPENDING的描述)。
- *
SigPnd,ShdPnd:待处理的线程和整个进程的信号的掩码(以十六进制表示)(请参阅pthreads(7)和signal(7))。
- *
SigBlk,SigIgn,SigCgt:掩码(以十六进制表示)指示信号被阻止,忽略和捕获(请参阅signal(7))。
- *
CapInh,CapPrm,CapEff:在可继承,允许和有效集中启用的功能的掩码(以十六进制表示)(请参阅功能(7))。
- *
CapBnd:功能范围集,以十六进制表示(自Linux 2.6.26起,请参见capabilitys(7))。
- *
CapAmb:环境功能集,以十六进制表示(从Linux 4.3开始,请参阅capability(7))。
- *
NoNewPrivs:no_new_privs位的值(从Linux 4.10开始,请参阅prctl(2))。
- *
seccomp:进程的Seccomp模式(从Linux 3.8开始,请参见seccomp(2))。 0表示SECCOMP_MODE_DISABLED; 1表示SECCOMP_MODE_STRICT; 2表示SECCOMP_MODE_FILTER。仅当内核是在启用CONFIG_SECCOMP内核配置选项的情况下构建的,才提供此字段。
- *
Speculation_Store_Bypass:缓解推测漏洞的状态(从Linux 4.17开始,请参阅prctl(2))。
- *
Cpus_allowed:此进程可能在其上运行的CPU的十六进制掩码(自Linux 2.6.24起,请参阅cpuset(7))。
- *
Cpus_allowed_list:与前一个相同,但采用"列表格式"(从Linux 2.6.26开始,请参阅cpuset(7))。
- *
Mems_allowed:此进程允许使用的内存节点的掩码(自Linux 2.6.24起,请参阅cpuset(7))。
- *
Mems_allowed_list:与以前相同,但采用"列表格式"(从Linux 2.6.26开始,请参阅cpuset(7))。
- *
manual_ctxt_switches,nonvoluntary_ctxt_switches:自愿和非自愿上下文切换的数量(自Linux 2.6.23开始)。
- /proc/[pid]/syscall(since Linux 2.6.27)
该文件显示该进程当前正在执行的系统调用的系统调用号和参数寄存器,然后是堆栈指针和程序计数器寄存器的值。尽管大多数系统调用使用较少的寄存器,但所有六个自变量寄存器的值均公开。
如果该进程被阻止,但未在系统调用中被阻止,则该文件显示-1代替系统调用号,后跟堆栈指针和程序计数器的值。如果未阻止进程,则文件仅包含字符串" running"。
仅当内核配置有CONFIG_HAVE_ARCH_TRACEHOOK时,此文件才存在。
访问此文件的权限由ptrace访问模式PTRACE_MODE_ATTACH_FSCREDS检查控制;参见ptrace(2)。
- /proc/[pid]/task(since Linux 2.6.0)
该目录包含进程中每个线程的一个子目录。每个子目录的名称是线程的数字线程ID([tid])(请参阅gettid(2))。
在每个子目录中,都有一组文件,它们的名称和内容与/ proc / [pid]目录下的文件相同。对于所有线程共享的属性,任务/ [tid]子目录下每个文件的内容将与父/ proc / [pid]目录中相应文件中的内容相同(例如,在多线程进程中) ,所有task / [tid] / cwd文件将具有与父目录中的/ proc / [pid] / cwd文件相同的值,因为进程中的所有线程共享一个工作目录。对于每个线程不同的属性,任务/ [tid]下的相应文件可能具有不同的值(例如,每个线程的任务/ [tid] /状态文件中的各个字段可能不同),或者它们可能/ proc / [pid]中根本不存在。
在多线程进程中,如果主线程已经终止(通常通过调用pthread_exit(3)),则/ proc / [pid] / task目录的内容不可用。
- /proc/[pid]/task/[tid]/children(since Linux 3.5)
以空格分隔的此任务的子任务列表。每个子任务由其TID表示。
该选项供检查点恢复(CRIU)系统使用,并且仅在所有子进程都已停止或冻结时才可靠地提供子进程列表。如果正在读取文件时目标任务的子级退出,则无法正常工作!离开的孩子可能会导致未离开的孩子从列表中被忽略。如果未冻结检查的任务及其子级,并且大多数代码可能不应该使用此接口,则与经典的基于PID的方法相比,该接口甚至更加不可靠。
在Linux 4.2之前,此文件的存在由CONFIG_CHECKPOINT_RESTORE内核配置选项控制。从Linux 4.2开始,它由CONFIG_PROC_CHILDREN选项控制。
- /proc/[pid]/timers(since Linux 3.10)
此过程的POSIX计时器列表。每个计时器都以一行以" ID:"开头的行列出。例如:
Node 0, zone DMA 1 1 1 0 2 1 1 0 1 1 3 Node 0, zone DMA32 65 47 4 81 52 28 13 10 5 1 404 Node 0, zone Normal 216 55 189 101 84 38 37 27 5 3 587
每个计时器显示的行具有以下含义:
- ID
此计时器的ID。这与timer_create(2)返回的计时器ID不同;相反,它是可通过siginfo_t结构的si_timerid字段使用的相同的内核内部ID(请参见sigaction(2))。
- signal
这是此计时器用来传递通知的信号编号,后跟一个斜杠,然后是提供给信号处理程序的sigev_value值。仅对通过信号通知的计时器有效。
- notify
斜杠前的部分指定此计时器用于传递通知的机制,并且是"线程","信号"或"无"之一。紧跟在斜线后面的是对于带有SIGEV_THREAD_ID通知的计时器的字符串" tid",或者对于由其他机制进行通知的计时器的字符串" pid"。跟随"。"是进程的PID(或线程的内核线程ID),如果计时器通过信号传递通知,则将传递信号。
- ClockID
此字段标识计时器用于测量时间的时钟。对于大多数时钟,这是一个与通过公开的用户空间CLOCK_ *常量之一匹配的数字。 CLOCK_PROCESS_CPUTIME_ID计时器在此字段中显示为-6。 CLOCK_THREAD_CPUTIME_ID计时器在此字段中显示为-2。
仅当使用CONFIG_CHECKPOINT_RESTORE配置内核时,此文件才可用。
- /proc/[pid]/timerslack_ns(since Linux 4.6)
该文件公开了进程的"当前"计时器松弛值,以纳秒表示。该文件是可写的,允许更改进程的计时器松弛值。向该文件写入0会将"当前"计时器松弛度重置为"默认"计时器松弛度值。有关更多详细信息,请参见prctl(2)中有关PR_SET_TIMERSLACK的讨论。
最初,访问此文件的权限由ptrace访问模式PTRACE_MODE_ATTACH_FSCREDS检查控制(请参见ptrace(2))。但是,这随后被认为是太严格的要求(并且产生了副作用,即要求一个进程具有CAP_SYS_PTRACE功能也将允许它查看和更改任何进程的内存)。因此,从Linux 4.9开始,仅(较弱)CAP_SYS_NICE功能才需要访问此文件。
- /proc/[pid]/uid_map, /proc/[pid]/gid_map(since Linux 3.5)
参见user_namespaces(7)。
- /proc/[pid]/wchan(since Linux 2.6.0)
符号名称与进程在睡眠中的内核位置相对应。
访问此文件的权限由ptrace访问模式PTRACE_MODE_READ_FSCREDS检查控制;参见ptrace(2)。
- /proc/[tid]
每个正在运行的线程都有一个数字子目录,该目录不是线程组领导者(即,其线程ID与其进程ID不同的线程);子目录由线程ID命名。这些子目录中的每个子目录都包含文件和子目录,这些文件和子目录公开了有关线程ID为tid的线程的信息。这些目录的内容与相应的/ proc / [pid] / task / [tid]目录相同。
当使用getdents(2)遍历/ proc时,/ proc / [tid]子目录不可见(因此当使用ls(1)查看/ proc的内容时,/ proc / [tid]子目录也不可见)。但是,这些目录的路径名对于在该路径名上进行操作的系统调用是可见的(即可用作参数)。
- /proc/apm
在内核编译时定义CONFIG_APM时,高级电源管理版本和电池信息。
- /proc/buddyinfo
该文件包含用于诊断内存碎片问题的信息。每行以节点的标识和区域的名称开头,共同标识一个存储区域。然后,将这些区域划分为一定顺序的可用块数进行计数。特定顺序的字节大小由以下公式给出:
(2 ^ order)* PAGE_SIZE
内核内部的二进制伙伴分配器算法会将一个块分割成两个较小顺序的块(因此大小为原来的一半),或者将两个连续的块合并为一个较高顺序的较大块(因此大小为原来的两倍),以满足分配请求并应对内存碎片。当从零开始计数时,该顺序与列号匹配。
例如在x86-64系统上:
cat /lib/modules/$(uname -r)/build/.config
在此示例中,有一个节点包含三个区域,并且有11种不同的块大小。如果页面大小为4 KB,则第一个称为DMA的区域(在x86上为前16 MB内存)具有1个4 KB块(0阶)可用,以及3个4 MB块(10阶)可用。
如果内存严重碎片化,则高阶块的计数器将为零,大连续区域的分配将失败。
有关区域的更多信息,可以在/ proc / zoneinfo中找到。
- /proc/bus
包含已安装总线的子目录。
- /proc/bus/pccard
在内核编译时设置CONFIG_PCMCIA时,PCMCIA设备的子目录。
- /proc/bus/pccard/drivers
- /proc/bus/pci
包含各种总线子目录和伪文件,这些伪文件包含有关PCI总线,已安装设备和设备驱动程序的信息。其中一些文件不是ASCII。
- /proc/bus/pci/devices
- /proc/cgroups(since Linux 2.6.24)
参见cgroups(7)。
- /proc/cmdline
- /proc/config.gz(since Linux 2.6)
该文件以与配置内核时使用.config文件显示的格式相同的格式公开用于构建当前正在运行的内核的配置选项(使用make xconfig,make config或类似方法)。文件内容被压缩;使用zcat(1)和zgrep(1)查看或搜索它们。只要未对以下文件进行任何更改,/ proc / config.gz的内容将与提供的内容相同:
cache buffer size in KB capacity number of sectors driver driver version geometry physical and logical geometry identify in hexadecimal media media type model manufacturer's model number settings drive settings smart_thresholds IDE disk management thresholds (in hex) smart_values IDE disk management values (in hex)
仅当使用CONFIG_IKCONFIG_PROC配置内核时才提供/proc/config.gz。
- /proc/crypto
内核加密API提供的密码列表。有关详细信息,请参阅内核源目录Documentation / crypto /(或4.10之前的Documentation / DocBook)下的内核Linux Kernel Crypto API文档;可使用诸如make htmldocs之类的命令在内核源树的根目录中构建该文档。 )。
- /proc/cpuinfo
这是CPU和系统体系结构相关项的集合,对于每种受支持的体系结构,都有不同的列表。两个常见的条目是处理器,它给出CPU编号和bogomips。在内核初始化期间计算的系统常数。 SMP机器具有每个CPU的信息。 lscpu(1)命令从该文件收集其信息。
- /proc/devices
主号码和设备组的文本列表。 MAKEDEV脚本可以使用它来与内核保持一致。
- /proc/diskstats(since Linux 2.5.69)
该文件包含每个磁盘设备的磁盘I / O统计信息。有关更多信息,请参见Linux内核源文件Documentation / iostats.txt。
- /proc/dma
这是正在使用的已注册ISA DMA(直接内存访问)通道的列表。
- /proc/driver
空子目录。
- /proc/execdomains
执行域列表(ABI个性)。
- /proc/fb
在内核编译期间定义CONFIG_FB时的帧缓冲区信息。
- /proc/filesystems
内核支持的文件系统的文本列表,即已编译到内核中或当前正在加载其内核模块的文件系统。 (另请参阅文件系统(5)。)如果文件系统标记有" nodev",则意味着它不需要安装块设备(例如,虚拟文件系统,网络文件系统)。
顺便说一句,当未指定文件系统并且无法确定文件系统类型时,mount(8)可能会使用该文件。然后尝试包含在此文件中的文件系统(标有" nodev"的文件系统除外)。
- /proc/fs
包含子目录,这些子目录又包含带有(某些)已安装文件系统信息的文件。
- /proc/ide
该目录存在于具有IDE总线的系统上。每个IDE通道和连接的设备都有目录。文件包括:
1: POSIX ADVISORY READ 5433 08:01:7864448 128 128 2: FLOCK ADVISORY WRITE 2001 08:01:7864554 0 EOF 3: FLOCK ADVISORY WRITE 1568 00:2f:32388 0 EOF 4: POSIX ADVISORY WRITE 699 00:16:28457 0 EOF 5: POSIX ADVISORY WRITE 764 00:16:21448 0 0 6: POSIX ADVISORY READ 3548 08:01:7867240 1 1 7: POSIX ADVISORY READ 3548 08:01:7865567 1826 2335 8: OFDLCK ADVISORY WRITE -1 08:01:8713209 128 191
hdparm(8)实用程序以友好格式提供对此信息的访问。
- /proc/interrupts
这用于记录每个IO设备每个CPU的中断数。从Linux 2.6.24开始,至少对于i386和x86-64体系结构,这还包括系统内部的中断(即与设备本身不相关的中断),例如NMI(不可屏蔽中断),LOC(本地)。计时器中断),而对于SMP系统,则是TLB(TLB刷新中断),RES(重新安排中断),CAL(远程功能调用中断)等。格式非常容易读取,以ASCII格式完成。
- /proc/iomem
Linux 2.4中的I / O内存映射。
- /proc/ioports
这是正在使用的当前注册的输入-输出端口区域的列表。
- /proc/kallsyms(since Linux 2.5.71)
它保存了modules(X)工具用来动态链接和绑定可加载模块的内核导出符号定义。在Linux 2.5.47和更早版本中,一个语法稍有不同的相似文件被称为ksyms。
- /proc/kcore
该文件代表系统的物理内存,并以ELF核心文件格式存储。使用此伪文件和未剥离的内核(/ usr / src / linux / vmlinux)二进制文件,可以使用GDB检查任何内核数据结构的当前状态。
文件的总长度为物理内存(RAM)的大小加4 KB。
- /proc/keys(since Linux 2.6.10)
参见 keyrings(7)。
- /proc/key-users(since Linux 2.6.10)
参见 keyrings(7)。
- /proc/kmsg
可以使用此文件代替syslog(2)系统调用来读取内核消息。一个进程必须具有超级用户特权才能读取此文件,并且只有一个进程应读取该文件。如果正在运行使用syslog(2)系统调用工具记录内核消息的syslog进程,则不应读取该文件。
该文件中的信息是使用dmesg(1)程序检索的。
- /proc/kpagecgroup(since Linux 4.3)
该文件包含每个页面要充电的内存cgroup的64位inode编号,该编号由页面帧号索引(请参见对/ proc / [pid] / pagemap的讨论)。
仅当启用CONFIG_MEMCG内核配置选项时,/ proc / kpagecgroup文件才存在。
- /proc/kpagecount(since Linux 2.6.25)
该文件包含每个物理页框架被映射的次数的64位计数,该计数由页框架号索引(请参见对/ proc / [pid] / pagemap的讨论)。
仅当启用CONFIG_PROC_PAGE_MONITOR内核配置选项时,/ proc / kpagecount文件才存在。
- /proc/kpageflags(since Linux 2.6.25)
该文件包含与每个物理页面帧相对应的64位掩码。它由页面框架号索引(请参见/ proc / [pid] / pagemap的讨论)。这些位如下:
0-KPF_LOCKED
1-KPF_ERROR
2-KPF_REFERENCED
3-KPF_UPTODATE
4-KPF_DIRTY
5-KPF_LRU
6-KPF_ACTIVE
7-KPF_SLAB
8-KPF_WRITEBACK
9-KPF_RECLAIM
10-KPF_BUDDY
11-KPF_MMAP(自Linux 2.6.31起)
12-KPF_ANON(自Linux 2.6.31起)
13-KPF_SWAPCACHE(自Linux 2.6.31起)
14-KPF_SWAPBACKED(自Linux 2.6.31起)
15-KPF_COMPOUND_HEAD(自Linux 2.6.31起)
16-KPF_COMPOUND_TAIL(自Linux 2.6.31起)
17-KPF_HUGE(自Linux 2.6.31起)
18-KPF_UNEVICTABLE(自Linux 2.6.31起)
19-KPF_HWPOISON(自Linux 2.6.31起)
20-KPF_NOPAGE(自Linux 2.6.31起)
21-KPF_KSM(从Linux 2.6.3起)
22-KPF_THP(自Linux 3.4起)
23-KPF_BALLOON(自Linux 3.18起)
24-KPF_ZERO_PAGE(自Linux 4.0起)
25-KPF_IDLE(自Linux 4.3起)有关这些位的含义的更多详细信息,请参见内核源文件Documentation / admin-guide / mm / pagemap.rst。在内核2.6.29之前,KPF_WRITEBACK,KPF_RECLAIM,KPF_BUDDY和KPF_LOCKED无法正确报告。
仅当启用CONFIG_PROC_PAGE_MONITOR内核配置选项时,才会存在/ proc / kpageflags文件。
- /proc/ksyms(Linux 1.1.23-2.5.47)
参见/ proc / kallsyms。
- /proc/loadavg
该文件的前三个字段是平均负载数字,给出了运行队列(状态R)或等待磁盘I / O(状态D)在1、5和15分钟内的平均作业数。它们与uptime(1)和其他程序给出的平均负载数相同。第四个字段由两个数字组成,中间用斜杠(/)分隔。其中第一个是当前可运行的内核调度实体(进程,线程)的数量。斜杠后的值是系统上当前存在的内核调度实体的数量。第五个字段是系统上最近创建的过程的PID。
- /proc/locks
此文件中显示的内容示例如下:
IP address HW type Flags HW address Mask Device 192.168.0.50 0x1 0x2 00:50:BF:25:68:F3 * eth0 192.168.0.250 0x1 0xc 00:00:00:00:00:00 * eth0
每行中显示的字段如下:
- (1)
列表中锁的顺序位置。
- (2)
锁定类型。这里可能出现的值包括:
- (3)
其中可能出现的字符串如下:
- ADVISORY
这是一个咨询锁。
- MANDATORY
这是强制锁。
- (4)
锁的类型。可以在此处显示的值是:
- READ
这是POSIX或OFD读锁,或BSD共享锁。
- WRITE
这是POSIX或OFD写锁,或BSD排他锁。
- (5)
拥有锁的进程的PID。
由于OFD锁不属于单个进程(因为多个进程可能具有引用相同打开文件描述的文件描述符),因此该字段中的OFD锁显示值-1。 (在内核4.14之前,存在一个错误,该错误意味着最初显示了获取锁的进程的PID而不是值-1。)
- (6)
三个冒号分隔的子字段,用于标识包含锁定文件所在文件系统的设备的主要和次要设备ID,后跟锁定文件的索引节点号。
- (7)
锁的第一个字节的字节偏移量。对于BSD锁,此值始终为0。
- (8)
锁的最后一个字节的字节偏移量。在此字段中的EOF表示该锁将扩展到文件末尾。对于BSD锁,显示的值始终为EOF。
从Linux 4.9开始,对/ proc / locks中显示的锁列表进行过滤,以仅显示已为其/ proc文件系统安装的PID名称空间(请参见pid_namespaces(7))中的进程的锁。 (在初始的PID名称空间中,没有对该文件中显示的记录进行过滤。)
lslocks(8)命令提供了有关每个锁的更多信息。
- /proc/malloc(only up to and including Linux 2.2)
仅在编译期间定义了CONFIG_DEBUG_MALLOC时,此文件才存在。
- /proc/meminfo
- This file reports statistics about memory usage on the system.
It is used by
free(1)
to report the amount of free and used memory (both physical and swap)
on the system as well as the shared memory and buffers used by the
kernel.
Each line of the file consists of a parameter name, followed by a colon,
the value of the parameter, and an option unit of measurement (e.g., "kB").
The list below describes the parameter names and
the format specifier required to read the field value.
Except as noted below,
all of the fields have been present since at least Linux 2.6.0.
Some fields are displayed only if the kernel was configured
with various options; those dependencies are noted in the list.- MemTotal%lu
总可用RAM(即,物理RAM减去一些保留位和内核二进制代码)。
- MemFree%lu
LowFree + HighFree的总和。
- MemAvailable%lu (since Linux 3.14)
不进行交换就可用于启动新应用程序的内存估计。
- Buffers%lu
相对临时存储的原始磁盘块不应太大(20 MB左右)。
- Cached%lu
从磁盘读取的文件的内存中高速缓存(页面高速缓存)。不包括SwapCached。
- SwapCached%lu
曾经被换出的内存被换回,但仍在交换文件中。 (如果内存压力很大,则无需再次换出这些页面,因为它们已经在交换文件中。这可以节省I / O。)
- Active%lu
最近使用过的内存,除非绝对必要,否则通常不会回收。
- Inactive%lu
最近较少使用的内存。它更有资格被回收用于其他目的。
- Active(anon)%lu (since Linux 2.6.28)
[待记录。]
- Inactive(anon)%lu (since Linux 2.6.28)
[待记录。]
- Active(file)%lu (since Linux 2.6.28)
[待记录。]
- Inactive(file)%lu (since Linux 2.6.28)
[待记录。]
- Unevictable%lu (since Linux 2.6.28)
(从Linux 2.6.28到2.6.30,需要CONFIG_UNEVICTABLE_LRU。)[待记录。]
- Mlocked%lu (since Linux 2.6.28)
(从Linux 2.6.28到2.6.30,需要CONFIG_UNEVICTABLE_LRU。)[待记录。]
- HighTotal%lu
(从Linux 2.6.19开始,需要CONFIG_HIGHMEM。)highmem的总量。 Highmem是ti860 MB物理内存以上的所有内存。 Highmem区域供用户空间程序或页面缓存使用。内核必须使用技巧来访问该内存,使其访问速度比lowmem慢。
- HighFree%lu
(从Linux 2.6.19开始,需要CONFIG_HIGHMEM。)免费的highmem数量。
- LowTotal%lu
(从Linux 2.6.19开始,需要CONFIG_HIGHMEM。)lowmem的总量。 Lowmem是内存,可以用于highmem可以使用的所有内容,但也可以供内核用于其自己的数据结构使用。除其他事项外,Slab的所有内容都在此进行分配。当您的内存不足时,就会发生坏事。
- LowFree%lu
(从Linux 2.6.19开始,需要CONFIG_HIGHMEM。)可用的lowmem数量。
- MmapCopy%lu (since Linux 2.6.29)
(需要CONFIG_MMU。)[待记录。]
- SwapTotal%lu
可用交换空间总量。
- SwapFree%lu
当前未使用的交换空间量。
- Dirty%lu
正在等待写回磁盘的内存。
- Writeback%lu
正在主动写回到磁盘的内存。
- AnonPages%lu (since Linux 2.6.18)
非文件支持的页面映射到用户空间页面表中。
- Mapped%lu
已映射到内存(使用mmap(2))的文件,例如库。
- Shmem%lu (since Linux 2.6.32)
tmpfs(5)文件系统中消耗的内存量。
- KReclaimable%lu (since Linux 4.20)
内核将在内存压力下尝试回收的内核分配。包括SReclaimable(如下)和其他带有收缩器的直接分配。
- Slab%lu
内核数据结构缓存。 (请参阅slabinfo(5)。)
- SReclaimable%lu (since Linux 2.6.19)
Slab的一部分,可能会被回收,例如缓存。
- SUnreclaim%lu (since Linux 2.6.19)
Slab的一部分,无法根据内存压力进行回收。
- KernelStack%lu (since Linux 2.6.32)
分配给内核堆栈的内存量。
- PageTables%lu (since Linux 2.6.18)
专用于最低级别的页表的内存量。
- Quicklists%lu (since Linux 2.6.27)
(需要CONFIG_QUICKLIST。)[待记录。]
- NFS_Unstable%lu (since Linux 2.6.18)
NFS页面已发送到服务器,但尚未提交到稳定存储。
- Bounce%lu (since Linux 2.6.18)
用于块设备"反弹缓冲区"的内存。
- WritebackTmp%lu (since Linux 2.6.26)
FUSE用于临时写回缓冲区的内存。
- CommitLimit%lu (since Linux 2.6.10)
这是当前可在系统上分配的内存总量,以千字节为单位。仅当启用了严格的过量使用记帐(/ proc / sys / vm / overcommit_memory中的模式2)时,才遵守此限制。该限制是根据/ proc / sys / vm / overcommit_memory中描述的公式计算的。有关更多详细信息,请参见内核源文件Documentation / vm / overcommit-accounting.rst。
- Committed_AS%lu
当前在系统上分配的内存量。提交的内存是已由进程分配的所有内存的总和,即使它们尚未被进程"使用"。分配1 GB内存(使用malloc(3)或类似的内存)但仅触摸300 MB内存的进程将显示为仅使用300 MB内存,即使该进程已为整个1 GB分配了地址空间。
这1 GB的内存已由VM"提交",可以由分配应用程序随时使用。如果在系统上启用了严格的过量使用(/ proc / sys / vm / overcommit_memory中的模式2),则不允许超出CommitLimit的分配。如果需要确保一旦成功分配了内存,进程就不会由于内存不足而失败,则此功能很有用。
- VmallocTotal%lu
vmalloc内存区域的总大小。
- VmallocUsed%lu
所使用的vmalloc区域的数量。从Linux 4.4开始,不再计算此字段,并且将其硬编码为0。请参见/ proc / vmallocinfo。
- VmallocChunk%lu
空闲的vmalloc区域的最大连续块。从Linux 4.4开始,不再计算该字段并将其硬编码为0。请参见/ proc / vmallocinfo。
- HardwareCorrupted%lu (since Linux 2.6.32)
(需要CONFIG_MEMORY_FAILURE。)[待记录。]
- LazyFree%lu (since Linux 4.12)
显示由madvise(2)MADV_FREE标记的内存量。
- AnonHugePages%lu (since Linux 2.6.38)
(需要CONFIG_TRANSPARENT_HUGEPAGE。)非文件支持的大页面映射到用户空间页面表中。
- ShmemHugePages%lu (since Linux 4.8)
(需要CONFIG_TRANSPARENT_HUGEPAGE。)共享内存(shmem)和tmpfs(5)所分配的巨大页面使用的内存。
- ShmemPmdMapped%lu (since Linux 4.8)
(需要CONFIG_TRANSPARENT_HUGEPAGE。)共享内存映射到具有大页面的用户空间。
- CmaTotal%lu (since Linux 3.1)
CMA(连续内存分配器)页面总数。 (需要CONFIG_CMA。)
- CmaFree%lu (since Linux 3.1)
免费的CMA(连续内存分配器)页面。 (需要CONFIG_CMA。)
- HugePages_Total%lu
(需要CONFIG_HUGETLB_PAGE。)大页面池的大小。
- HugePages_Free%lu
(需要CONFIG_HUGETLB_PAGE。)池中尚未分配的大页面数。
- HugePages_Rsvd%lu (since Linux 2.6.17)
(需要CONFIG_HUGETLB_PAGE。)这是已从池中分配分配但尚未分配的大页面数。这些保留的大页面保证了应用程序能够在故障时从大页面池中分配一个大页面。
- HugePages_Surp%lu (since Linux 2.6.24)
(需要CONFIG_HUGETLB_PAGE。)这是/ proc / sys / vm / nr_hugepages中的值上方的池中大页面的数量。多余的大页面的最大数量由/ proc / sys / vm / nr_overcommit_hugepages控制。
- Hugepagesize%lu
(需要CONFIG_HUGETLB_PAGE。)大页面的大小。
- DirectMap4k%lu (since Linux 2.6.27)
内核在4 kB页中线性映射的RAM字节数。 (x86。)
- DirectMap4M%lu (since Linux 2.6.27)
内核在4 MB页面中线性映射的RAM字节数。 (已启用CONFIG_X86_64或CONFIG_X86_PAE的x86。)
- DirectMap2M%lu (since Linux 2.6.27)
内核在2 MB页面中线性映射的RAM字节数。 (x86既未启用CONFIG_X86_64也未启用CONFIG_X86_PAE。)
- DirectMap1G%lu (since Linux 2.6.27)
(已启用CONFIG_X86_64和CONFIG_X86_DIRECT_GBPAGES的x86。)
- /proc/modules
系统已加载的模块的文本列表。另请参见lsmod(8)。
- /proc/mounts
在内核2.4.19之前,此文件是系统上当前安装的所有文件系统的列表。随着Linux 2.4.19中按进程的安装命名空间的引入(请参见mount_namespaces(7)),此文件成为/ proc / self / mounts的链接,该文件列出了进程自己的安装命名空间的安装点。该文件的格式记录在fstab(5)中。
- /proc/mtrr
存储器类型范围寄存器。有关详细信息,请参见Linux内核源文件Documentation / x86 / mtrr.txt(或Linux 2.6.28之前的Documentation / mtrr.txt)。
- /proc/net
该目录包含各种文件和子目录,这些文件和子目录包含有关网络层的信息。这些文件包含ASCII结构,因此可通过cat(1)读取。但是,标准的netstat(8)套件可以更干净地访问这些文件。
随着网络名称空间的出现,与网络堆栈有关的各种信息都被虚拟化了(请参阅network_namespaces(7))。因此,从Linux 2.6.25开始,/ proc / net是指向/ proc / self / net目录的符号链接,该目录包含与以下所列相同的文件和目录。但是,这些文件和目录现在公开了该进程所属的网络名称空间的信息。
- /proc/net/arp
它保存用于地址解析的内核ARP表的ASCII可读转储。它将显示动态学习和预编程的ARP条目。格式为:
Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 2776770 11307 0 0 0 0 0 0 2776770 11307 0 0 0 0 0 0 eth0: 1215645 2751 0 0 0 0 0 0 1782404 4324 0 0 0 427 0 0 ppp0: 1622270 5552 1 0 0 0 0 0 354130 5669 0 0 0 0 0 0 tap0: 7714 81 0 0 0 0 0 0 7714 81 0 0 0 0 0 0
这里的" IP地址"是机器的IPv4地址,"硬件类型"是RFC 826地址的硬件类型。这些标志是ARP结构的内部标志(在/ usr / include / linux /中定义) if_arp.h)和"硬件地址"是该IP地址的数据链路层映射(如果已知)。
- /proc/net/dev
dev伪文件包含网络设备状态信息。这给出了接收和发送的数据包的数量,错误和冲突的数量以及其他基本统计信息。 ifconfig(8)程序使用它们来报告设备状态。格式为:
indx interface_name dmi_u dmi_g dmi_address 2 eth0 1 0 01005e000001 3 eth1 1 0 01005e000001 4 eth2 1 0 01005e000001
- /proc/net/dev_mcast
在/usr/src/linux/net/core/dev_mcast.c中定义:
sl local_address rem_address st tx_queue rx_queue tr rexmits tm->when uid 1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0 1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0 1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0
- /proc/net/igmp
Internet组管理协议。在/usr/src/linux/net/core/igmp.c中定义。
- /proc/net/rarp
该文件使用与arp文件相同的格式,并且包含用于提供rarp(8)反向地址查找服务的当前反向映射数据库。如果未在内核中配置rarp,则该文件将不存在。
- /proc/net/raw
保存RAW套接字表的转储。除调试外,许多信息都没有用。 " sl"值是套接字的内核哈希槽," local_address"是本地地址和协议号对。 " St"是套接字的内部状态。就内核内存使用而言," tx_queue"和" rx_queue"是传出和传入数据队列。 RAW不使用" tr"," tm-> when"和" rexmits"字段。 " uid"字段保存套接字创建者的有效UID。
- /proc/net/snmp
该文件包含SNMP代理的IP,ICMP,TCP和UDP管理信息库所需的ASCII数据。
- /proc/net/tcp
保存TCP套接字表的转储。除调试外,许多信息都没有用。 " sl"值是套接字的内核哈希插槽," local_address"是本地地址和端口号对。 " rem_address"是远程地址和端口号对(如果已连接)。 " St"是套接字的内部状态。就内核内存使用而言," tx_queue"和" rx_queue"是传出和传入数据队列。 " tr"," tm-> when"和" rexmits"字段保存内核套接字状态的内部信息,仅对调试有用。 " uid"字段保存套接字创建者的有效UID。
- /proc/net/udp
保存UDP套接字表的转储。除调试外,许多信息都没有用。 " sl"值是套接字的内核哈希插槽," local_address"是本地地址和端口号对。 " rem_address"是远程地址和端口号对(如果已连接)。 " St"是套接字的内部状态。就内核内存使用而言," tx_queue"和" rx_queue"是传出和传入数据队列。 UDP不使用" tr"," tm-> when"和" rexmits"字段。 " uid"字段保存套接字创建者的有效UID。格式为:
Num RefCount Protocol Flags Type St Inode Path 0: 00000002 00000000 00000000 0001 03 42 1: 00000001 00000000 00010000 0001 01 1948 /dev/printer
- /proc/net/unix
列出系统中存在的UNIX域套接字及其状态。格式为:
1 4207 0 2 65535 0 0 0 1 (1) (2) (3)(4) (5) (6) (7) (8)
字段如下:
- Num:
内核表插槽号。
- RefCount:
套接字的用户数。
- Protocol:
当前始终为0。
- Flags:
内部内核标志保存套接字的状态。
- Type:
套接字类型。对于SOCK_STREAM套接字,为0001;对于SOCK_STREAM套接字,为0001。对于SOCK_DGRAM插槽,它是0002;对于SOCK_SEQPACKET套接字,为0005。
- St:
套接字的内部状态。
- Inode:
套接字的索引节点号。
- Path:
套接字的绑定路径名(如果有)。抽象名称空间中的套接字包含在列表中,并以以'@'开头的路径显示。
- /proc/net/netfilter/nfnetlink_queue
该文件包含有关netfilter用户空间队列(如果使用)的信息。每行代表一个队列。未显示尚未由用户空间预订的队列。
echo aqscsi add-single-device 1 0 5 0aq > /proc/scsi/scsi
每行中的字段是:
- (1)
队列的ID。这与在iptables(8)NFQUEUE目标的--queue-num或--queue-balance选项中指定的内容匹配。有关更多信息,请参见iptables-extensions(8)。
- (2)
Netlink端口ID订阅了队列。
- (3)
当前排队等待应用程序处理的数据包数。
- (4)
队列的复制模式。它是1(仅元数据)或2(还将有效载荷数据复制到用户空间)。
- (5)
复制范围;也就是说,最多应将多少字节的数据包有效负载复制到用户空间。
- (6)
队列已丢弃。由于太多的数据包已经在等待用户空间发送回强制接受/丢弃判决,内核必须丢弃的数据包数。
- (7)
队列用户已删除。在netlink子系统中丢弃的数据包数。这种下降通常在相应的套接字缓冲区已满时发生。也就是说,用户空间无法足够快地读取消息。
- (8)
序列号。每个排队的数据包都与一个(32位)单调递增的序列号相关联。这显示排队的最新数据包的ID。
最后一个数字仅出于兼容性原因而存在,并且始终为1。
- /proc/partitions
包含每个分区的主要和次要编号,以及1024字节块的数量和分区名称。
- /proc/pci
这是在内核初始化及其配置过程中找到的所有PCI设备的列表。
不推荐使用此文件,而推荐使用PCI的新/ proc接口(/ proc / bus / pci)。它在Linux 2.2中成为可选(在内核编译时设置CONFIG_PCI_OLD_PROC可用)。在Linux 2.4中再次非强制启用了它。接下来,它在Linux 2.6中被弃用(仍可与CONFIG_PCI_LEGACY_PROC集一起使用),最后从Linux 2.6.17开始将其完全删除。
- /proc/profile(since Linux 2.4)
仅当使用profile = 1命令行选项引导内核时,此文件才存在。它以二进制格式公开内核分析信息,以供readprofile(1)使用。向此文件写入(例如,空字符串)会重置性能分析计数器;在某些体系结构上,编写大小为sizeof(int)的二进制整数"性能分析乘数"可设置性能分析中断频率。
- /proc/scsi
一个包含scsi中级伪文件和各种SCSI低级驱动程序目录的目录,其中包含该系统中每个SCSI主机的文件,所有这些文件都提供了SCSI IO子系统某些部分的状态。这些文件包含ASCII结构,因此可通过cat(1)读取。
您还可以写入某些文件以重新配置子系统或打开或关闭某些功能。
- /proc/scsi/scsi
这是内核已知的所有SCSI设备的列表。该清单类似于启动期间看到的清单。 scsi当前仅支持add-single-device命令,该命令允许root将热插拔设备添加到已知设备列表中。
命令
echo 100000 > /proc/sys/fs/file-max
将导致主机scsi1在SCSI通道0上扫描ID 5 LUN 0上的设备。如果此地址上已有已知的设备,或者该地址无效,则将返回错误。
- /proc/scsi/[drivername]
[驱动程序名称]当前可以是NCR53c7xx,aha152x,aha1542,aha1740,aic7xxx,buslogic,eata_dma,eata_pio,fdomain,in2000,pas16,qlogic,scsi_debug,seagate,t128,u15-24f,ultrastore或wd7000。这些目录显示所有注册了至少一个SCSI HBA的驱动程序。每个目录在每个注册主机中都包含一个文件。每个主机文件均以初始化期间为主机分配的编号命名。
读取这些文件通常将显示驱动程序和主机的配置,统计信息等。
写入这些文件允许在不同主机上进行不同操作。例如,使用delay和nolatency命令,root用户可以在eata_dma驱动程序中打开和关闭命令延迟测量代码。使用lockup和unlock命令,root用户可以控制scsi_debug驱动程序模拟的总线锁定。
- /proc/self
该目录引用访问/ proc文件系统的进程,并且与以相同进程的进程ID命名的/ proc目录相同。
- /proc/slabinfo
有关内核缓存的信息。有关详细信息,请参见slabinfo(5)。
- /proc/stat
内核/系统统计信息。因架构而异。常见条目包括:
- cpu 10132153 290696 3084719 46828483 16683 0 25195 0 175628 0
cpu0 1393280 32966 572056 13343292 6130 0 17875 0 23933 0
The amount of time, measured in units of
USER_HZ (1/100ths of a second on most architectures, use
sysconf(_SC_CLK_TCK)to obtain the right value),
that the system ("cpu" line) or the specific CPU ("cpuN" line)
spent in various states:- user
(1)在用户模式下花费的时间。
- nice
(2)在低优先级的用户模式下花费的时间(不错)。
- system
(3)在系统模式下花费的时间。
- idle
(4)在空闲任务上花费的时间。此值应为USER_HZ乘/ proc / uptime伪文件中第二个条目的时间。
- iowait(since Linux 2.5.41)
(5)等待I / O完成的时间。由于以下原因,此值不可靠:
- 1.
CPU不会等待I / O完成。 iowait是任务等待I / O完成的时间。当CPU进入空闲状态以处理未完成的任务I / O时,将在此CPU上调度另一个任务。
- 2.
在多核CPU上,等待I / O完成的任务没有在任何CPU上运行,因此很难计算每个CPU的iowait。
- 3.
在某些情况下,此字段中的值可能会减小。
- irq(since Linux 2.6.0)
(6)时间服务中断。
- softirq(since Linux 2.6.0)
(7)时间服务软件。
- steal(since Linux 2.6.11)
(8)被盗时间,即在虚拟化环境中运行时在其他操作系统上花费的时间
- guest(since Linux 2.6.24)
(9)在Linux内核控制下为来宾操作系统运行虚拟CPU所花费的时间。
- guest_nice(since Linux 2.6.33)
(10)运行良好的客户机(Linux内核控制下的客户机操作系统的虚拟CPU)所花费的时间。
- page 5741 1808
系统分页的页数和(从磁盘)分页的页数。
- swap 1 0
导入和导出的交换页面数。
intr 1462898此行显示从引导时间开始服务的每个可能系统中断的中断计数。第一列是所有服务的中断的总数,包括未编号的体系结构特定的中断;随后的每一列是该特定编号的中断的总数。未编号的中断未显示,仅累加总数。
- disk_io: (2,0):(31,30,5764,1,2) (3,0):...
(major,disk_idx):( noinfo,read_io_ops,blks_read,write_io_ops,blks_write)
(仅Linux 2.4)- ctxt 115315
系统经历的上下文切换次数。
- btime 769041601
开机时间,以自大纪元(1970年1月1日00:00:00 +0000(UTC))为单位。
- processes 86031
自启动以来的叉子数量。
- procs_running 6
处于可运行状态的进程数。 (从Linux 2.5.45开始。)
- procs_blocked 2
等待I / O完成的已阻止进程数。 (从Linux 2.5.45开始。)
- softirq 229245889 94 60001584 13619 5175704 2471304 28 51212741 59130143 0 51240672
此行显示所有CPU的softirq数。第一列是所有softirq的总数,随后的每一列是特定softirq的总数。 (从Linux 2.6.31开始。)
- /proc/swaps
交换使用中的区域。另请参见swapon(8)。
- /proc/sys
该目录(从1.3.57版本开始)包含许多与内核变量相对应的文件和子目录。可以使用/ proc文件系统以及(不建议使用的)sysctl(2)系统调用读取这些变量,有时可以对其进行修改。
字符串值可以由aq \ 0aq或aq \ naq终止。
整数和长值可以十进制或十六进制表示(例如0x3FFF)。写入多个整数或长值时,这些值可以由以下任意空白字符分隔:aq,aq,aq \ taq或aq \ naq。使用其他分隔符会导致错误EINVAL。
- /proc/sys/abi(since Linux 2.4.10)
该目录可能包含带有应用程序二进制信息的文件。有关更多信息,请参见Linux内核源文件Documentation / sysctl / abi.txt。
- /proc/sys/debug
该目录可能为空。
- /proc/sys/dev
此目录包含特定于设备的信息(例如dev / cdrom / info)。在某些系统上,它可能为空。
- /proc/sys/fs
该目录包含与文件系统相关的内核变量的文件和子目录。
- /proc/sys/fs/aio-max-nrand /proc/sys/fs/aio-nr(since Linux 2.6.4)
aio-nr是io_setup(2)调用为所有当前活动的AIO上下文指定的事件总数。如果aio-nr达到aio-max-nr,则io_setup(2)将失败,并显示错误EAGAIN。提高aio-max-nr不会导致任何内核数据结构的预分配或调整大小。
- /proc/sys/fs/binfmt_misc
可以在Linux内核源代码的Documentation / admin-guide / binfmt-misc.rst文件中找到该目录中的文档(或者在较早的内核中的Documentation / binfmt_misc.txt中)。
- /proc/sys/fs/dentry-state(since Linux 2.2)
- This file contains information about the status of the
directory cache (dcache).
The file contains six numbers,
nr_dentry, nr_unused, age_limit(age in seconds),
want_pages
(pages requested by system) and two dummy values.
- *
nr_dentry是已分配的牙科(dcache条目)的数量。在Linux 2.2中未使用此字段。
- *
nr_unused是未使用牙科的数量。
- *
age_limit是生存时间(以秒为单位),当内存不足时,可以在该生存时间后回收dcache条目。
- *
当内核调用了rinkle_dcache_pages()且dcache尚未被修剪时,want_pages为非零。
- /proc/sys/fs/dir-notify-enable
此文件可用于在系统范围内禁用或启用fcntl(2)中描述的dnotify接口。该文件中的值0禁用接口,而值1启用接口。
- /proc/sys/fs/dquot-max
此文件显示最大缓存磁盘配额条目数。在某些(2.4)系统上,它不存在。如果可用的高速缓存磁盘配额条目的数量非常少,并且同时系统用户数量非常多,则可能需要提高该限制。
- /proc/sys/fs/dquot-nr
该文件显示分配的磁盘配额条目数和可用磁盘配额条目数。
- /proc/sys/fs/epoll(since Linux 2.6.28)
该目录包含文件max_user_watches,该文件可用于限制epoll接口消耗的内核内存量。有关更多详细信息,请参见epoll(7)。
- /proc/sys/fs/file-max
该文件定义了系统范围内所有进程的打开文件数限制。遇到此限制时失败的系统调用将失败,并显示错误ENFILE。 (另请参阅setrlimit(2),进程可以使用它来设置每个进程可以打开的文件数的限制RLIMIT_NOFILE。)如果您在内核日志中收到很多关于用尽了的错误消息文件句柄(查找" VFS:已达到文件最大限制"),请尝试增加此值:
# echo aqdarkstaraq > /proc/sys/kernel/hostname # echo aqmydomainaq > /proc/sys/kernel/domainname
特权进程(CAP_SYS_ADMIN)可以覆盖文件最大限制。
- /proc/sys/fs/file-nr
该(只读)文件包含三个数字:已分配文件句柄的数量(即当前打开的文件数量);空闲文件句柄的数量;以及文件句柄的最大数量(即与/ proc / sys / fs / file-max相同的值)。如果分配的文件句柄数量接近最大值,则应考虑增加最大值。在Linux 2.6之前,内核分配的文件是动态处理的,但是并没有再次释放它们。而是将免费文件句柄保留在列表中以进行重新分配。 "免费文件句柄"值指示该列表的大小。大量的免费文件句柄表示打开文件句柄的使用已达到峰值。从Linux 2.6开始,内核会释放释放的文件句柄,并且"空闲文件句柄"值始终为零。
- /proc/sys/fs/inode-max(only present until Linux 2.2)
该文件包含最大内存inode。该值应比file-max中的值大3-4倍,因为stdin,stdout和网络套接字也需要一个inode来处理它们。当您经常用尽inode时,您需要增加此值。
从Linux 2.4开始,对inode的数量不再有静态限制,并且该文件已删除。
- /proc/sys/fs/inode-nr
该文件包含来自inode-state的前两个值。
- /proc/sys/fs/inode-state
该文件包含七个数字:nr_inodes,nr_free_inodes,预收缩和四个伪值(始终为零)。
nr_inodes是系统已分配的索引节点数。 nr_free_inodes表示空闲索引节点的数量。
当nr_inodes> inode-max且系统需要修剪inode列表而不分配更多资源时,preshrink不为零。从Linux 2.4开始,此字段为伪值(始终为零)。
- /proc/sys/fs/inotify(since Linux 2.6.13)
该目录包含文件max_queued_events,max_user_instances和max_user_watches,可用于限制inotify接口消耗的内核内存量。有关更多详细信息,请参见inotify(7)。
- /proc/sys/fs/lease-break-time
该文件指定了内核向持有文件租约的进程(fcntl(2))授予该进程的信号后,通知该进程另一个进程正在等待打开文件的宽限期。如果租约持有人在此宽限期内没有删除或降级租约,则内核会强行中断租约。
- /proc/sys/fs/leases-enable
此文件可用于在系统范围内启用或禁用文件租约(fcntl(2))。如果此文件包含值0,则禁用租约。非零值将启用租约。
- /proc/sys/fs/mount-max(since Linux 4.9)
该文件中的值指定安装名称空间中可能存在的最大安装数量。该文件的默认值为100,000。
- /proc/sys/fs/mqueue(since Linux 2.6.6)
此目录包含文件msg_max,msgsize_max和queues_max,控制POSIX消息队列使用的资源。有关详细信息,请参见mq_overview(7)。
- /proc/sys/fs/nr_open(since Linux 2.6.25)
此文件对可以将RLIMIT_NOFILE资源限制提高到的值施加上限(请参见getrlimit(2))。此上限适用于无特权和特权进程。该文件的默认值为1048576。(在Linux 2.6.25之前,RLIMIT_NOFILE的上限被硬编码为相同的值。)
- /proc/sys/fs/overflowgidand /proc/sys/fs/overflowuid
这些文件使您可以更改固定UID和GID的值。默认值为65534。某些文件系统仅支持16位UID和GID,尽管在Linux中UID和GID为32位。在启用了写入功能的情况下挂载这些文件系统之一时,任何超过65535的UID或GID都会在写入磁盘之前转换为溢出值。
- /proc/sys/fs/pipe-max-size(since Linux 2.6.35)
参见管道 pipe(7)。
- /proc/sys/fs/pipe-user-pages-hard(since Linux 4.5)
参见管道 pipe(7)。
- /proc/sys/fs/pipe-user-pages-soft(since Linux 4.5)
参见管道 pipe(7)。
- /proc/sys/fs/protected_fifos(since Linux 4.19)
该文件中的值是/可以设置为以下之一:
- 0
写入FIFO是不受限制的。
- 1
除非调用者不是目录所有者,否则不要在调用者在世界可访问的粘性目录中不拥有的FIFO上允许O_CREAT open(2)。
- 2
至于值1,但该限制也适用于可写组的粘性目录。
上述保护的目的是避免在程序期望创建常规文件时意外写入攻击者控制的FIFO。
- /proc/sys/fs/protected_hardlinks(since Linux 3.6)
当此文件中的值为0时,硬链接的创建没有任何限制(即,这是Linux 3.6之前的历史行为)。当此文件中的值为1时,只有满足以下条件之一,才可以创建到目标文件的硬链接:
- *
调用过程在其用户名称空间中具有CAP_FOWNER功能,而文件UID在名称空间中具有映射。
- *
创建链接的进程的文件系统UID与目标文件的所有者(UID)匹配(如凭据(7)中所述,进程的文件系统UID通常与其有效UID相同)。
- *
满足以下所有条件:
- *
目标是常规文件;
- *
目标文件未启用其设置用户ID模式位;
- *
目标文件没有同时启用其set-group-ID和group-executable模式位;和
- *
调用方具有读取和写入目标文件的权限(通过文件的权限掩码或具有适当功能的权限)。
该文件的默认值为0。将该值设置为1可防止长期存在的安全问题,这些问题是由基于硬链接的检查时间,使用时间竞争引起的,这种情况在世界可写目录中最常见作为/ tmp。利用此缺陷的常见方法是在遵循给定的硬链接时(即,根进程遵循由另一个用户创建的硬链接)跨越特权边界。此外,在没有单独分区的系统上,这可以防止未授权用户"固定"易受攻击的set-user-ID和set-group-ID文件,以防管理员升级或链接到特殊文件。
- /proc/sys/fs/protected_regular(since Linux 4.19)
该文件中的值是/可以设置为以下之一:
- 0
写入常规文件不受限制。
- 1
除非调用者在目录可写的粘滞目录中不拥有这些常规文件,否则不要在其上拥有O_CREAT open(2)。
- 2
至于值1,但该限制也适用于可写组的粘性目录。
以上保护的目的类似于protected_fifos,但是允许应用程序避免写入攻击者控制的常规文件,而该文件可能在该文件中创建。
- /proc/sys/fs/protected_symlinks(since Linux 3.6)
当此文件中的值为0时,对以下符号链接没有任何限制(即,这是Linux 3.6之前的历史行为)。当此文件中的值为1时,仅在以下情况下才跟随符号链接:
- *
链接后的进程的文件系统UID与符号链接的所有者(UID)匹配(如凭据(7)中所述,进程的文件系统UID通常与其有效UID相同);
- *
链接不在世界可粘贴的粘性目录中;要么
- *
符号链接及其父目录具有相同的所有者(UID)
由于上述限制,未能遵循符号链接的系统调用将在errno中返回错误EACCES。
该文件的默认值为0。将值设置为1可避免长期访问访问符号链接时基于检查时间和使用时间竞争的安全问题。
- /proc/sys/fs/suid_dumpable(since Linux 2.6.13)
在prctl(2)中描述的情况下,此文件中的值分配给进程的"可转储"标志。实际上,此文件中的值确定是否为设置用户ID生成核心转储文件,还是为受保护/污染的二进制文件生成核心转储文件。如上所述,"可转储"设置还会影响进程的/ proc / [pid]目录中文件的所有权。
可以指定三个不同的整数值:
- 0 (default)
这提供了传统的(Linux 2.6.13之前的)行为。对于更改了凭据(通过调用seteuid(2),setgid(2)或类似的代码,或者通过执行set-user-ID或set-group-ID程序)或其二进制文件的进程,不会生成核心转储。没有启用读取权限。
- 1 ("debug")
所有进程都尽可能转储核心。 (在core(5)中描述了为什么进程仍不能转储core的原因。)core dump由转储过程的文件系统用户ID拥有,并且不应用安全性。这仅用于系统调试情况:此模式是不安全的,因为它允许无特权的用户检查特权进程的内存内容。
- 2 ("suidsafe")
通常不会转储的任何二进制文件(请参见上面的" 0")都只能由root用户读取。这使用户可以删除核心转储文件,但不能读取它。出于安全原因,在此模式下核心转储不会覆盖彼此或其他文件。当管理员试图在正常环境中调试问题时,此模式是合适的。
此外,从Linux 3.6开始,/ proc / sys / kernel / core_pattern必须是绝对路径名或管道命令,如core(5)中所述。如果core_pattern不遵循这些规则,则会将警告写入内核日志,并且不会生成任何内核转储。
有关进程的"可转储"设置对ptrace访问模式检查的影响的详细信息,请参见ptrace(2)。
- /proc/sys/fs/super-max
该文件控制超级块的最大数量,从而控制内核可以具有的已挂载文件系统的最大数量。如果您需要装载的文件系统超出super-max中当前值所允许的数量,则仅需要增加super-max。
- /proc/sys/fs/super-nr
该文件包含当前已挂载的文件系统的数量。
- /proc/sys/kernel
该目录包含控制一系列内核参数的文件,如下所述。
- /proc/sys/kernel/acct
该文件包含三个数字:高水位,低水位和频率。如果启用了BSD样式的过程记帐,则这些值将控制其行为。如果日志所在的文件系统上的可用空间低于低水位百分比,则记帐将暂停。如果自由空间超过高水位百分比,则会计将恢复。频率确定内核检查可用空间量的频率(值以秒为单位)。默认值为4、2和30。也就是说,如果2%或更少的可用空间暂停,则暂停;如果有4%或更多的可用空间,请恢复;考虑有关30秒内有效的可用空间量的信息。
- /proc/sys/kernel/auto_msgmni(Linux 2.6.27 to 3.18)
从Linux 2.6.27到3.18,此文件用于控制添加/删除内存或创建/删除IPC名称空间时/ proc / sys / kernel / msgmni中值的重新计算。在该文件中回显" 1"将启用msgmni自动重新计算(并根据当前的可用内存量和IPC名称空间的数量触发msgmni的重新计算)。回显" 0"将禁用自动重新计算。 (如果将值显式分配给/ proc / sys / kernel / msgmni,则也会禁用自动重新计算。)auto_msgmni的默认值为1。
从Linux 3.19开始,此文件的内容无效(因为msgmni的默认值接近最大可能值),并且从此文件读取的值始终返回值" 0"。
- /proc/sys/kernel/cap_last_cap(since Linux 3.2)
参见功能(7)。
- /proc/sys/kernel/cap-bound(from Linux 2.2 to 2.6.24)
该文件包含内核功能边界集的值(表示为带符号的十进制数字)。此集合与execve(2)期间进程允许的功能进行"与"运算。从Linux 2.6.25开始,系统范围的功能边界集消失了,并被每个线程的边界集所取代。请参阅功能(7)。
- /proc/sys/kernel/core_pattern
参见core(5)。
- /proc/sys/kernel/core_pipe_limit
参见core(5)。
- /proc/sys/kernel/core_uses_pid
参见core(5)。
- /proc/sys/kernel/ctrl-alt-del
该文件控制键盘上Ctrl-Alt-Del的处理。当此文件中的值为0时,将捕获Ctrl-Alt-Del并将其发送到init(1)程序以进行正常重启。当该值大于零时,Linux对Vulcan Nerve Pinch(tm)的反应将是立即重启,甚至不同步其脏缓冲区。注意:当某个程序(例如dosemu)的键盘处于"原始"模式时,在到达内核tty层之前,该程序将拦截ctrl-alt-del,由程序决定如何处理它。
- /proc/sys/kernel/dmesg_restrict(since Linux 2.6.37)
此文件中的值确定哪些人可以看到内核syslog内容。该文件中的0值没有任何限制。如果值为1,则只有特权用户才能读取内核syslog。 (有关更多详细信息,请参见syslog(2)。)从Linux 3.4开始,只有具有CAP_SYS_ADMIN功能的用户才能更改此文件中的值。
- /proc/sys/kernel/domainnameand /proc/sys/kernel/hostname
可用于以与命令domainname(1)和hostname(1)完全相同的方式来设置NIS / YP域名和您的机器的主机名,即:
# hostname aqdarkstaraq # domainname aqmydomainaq
与...具有相同的效果
# echo 1 > /proc/timer_stats
但是请注意,经典的darkstar.frop.org具有主机名" darkstar"和DNS(Internet域名服务器)域名" frop.org",请勿与NIS(网络信息服务)或YP(黄页)混淆。 )域名。这两个域名通常是不同的。有关详细讨论,请参见hostname(1)手册页。
- /proc/sys/kernel/hotplug
该文件包含热插拔策略代理的路径名。该文件的默认值为/ sbin / hotplug。
/ proc / sys / kernel / htab-reclaim(在Linux 2.4.9.2之前)(仅适用于PowerPC)如果将此文件设置为非零值,则每次都会删除PowerPC htab(请参见内核文件Documentation / powerpc / ppc_htab.txt)。系统进入空闲循环。
- /proc/sys/kernel/keys/*
该目录包含各种文件,这些文件定义了密钥管理工具的参数和限制。这些文件在keyrings(7)中进行了描述。
- /proc/sys/kernel/kptr_restrict(since Linux 2.6.38)
此文件中的值确定是否通过/ proc文件和其他接口公开内核地址。该文件中的0值没有任何限制。如果值为1,则除非用户具有CAP_SYSLOG功能,否则使用%pK格式说明符打印的内核指针将被替换为零。如果值为2,则无论用户的能力如何,使用%pK格式说明符打印的内核指针都将替换为零。该文件的初始默认值为1,但在Linux 2.6.39中将默认值更改为0。从Linux 3.4开始,只有具有CAP_SYS_ADMIN功能的用户才能更改此文件中的值。
- /proc/sys/kernel/l2cr
(仅限PowerPC)此文件包含一个标志,用于控制G3处理器板的L2高速缓存。如果为0,则禁用缓存。如果非零,则启用。
- /proc/sys/kernel/modprobe
该文件包含内核模块加载器的路径名。缺省值为/ sbin / modprobe。仅当启用了CONFIG_MODULES(在Linux 2.6.26和更早版本中为CONFIG_KMOD)选项构建内核时,该文件才存在。它由Linux内核源文件Documentation / kmod.txt(仅在内核2.4及更低版本中提供)描述。
- /proc/sys/kernel/modules_disabled(since Linux 2.6.31)
一个切换值,指示是否允许在其他模块化内核中加载模块。此切换默认为关闭(0),但可以设置为true(1)。一旦为true,就不能加载或卸载模块,并且不能将切换设置回false。只有在启用了CONFIG_MODULES选项的情况下构建内核时,该文件才存在。
- /proc/sys/kernel/msgmax(since Linux 2.2)
该文件定义了一个系统范围的限制,该限制指定了写在System V消息队列上的单个消息中的最大字节数。
- /proc/sys/kernel/msgmni(since Linux 2.4)
该文件定义了系统范围内消息队列标识符的数量限制。另请参见/ proc / sys / kernel / auto_msgmni。
- /proc/sys/kernel/msgmnb(since Linux 2.2)
该文件定义了系统范围的参数,该参数用于初始化随后创建的消息队列的msg_qbytes设置。 msg_qbytes设置指定可以写入消息队列的最大字节数。
- /proc/sys/kernel/ngroups_max(since Linux 2.6.4)
这是一个只读文件,显示进程的组成员资格数量的上限。
- /proc/sys/kernel/ns_last_pid(since Linux 3.3)
参见pid_namespaces(7)。
- /proc/sys/kernel/ostypeand /proc/sys/kernel/osrelease
这些文件提供/ proc / version的子字符串。
- /proc/sys/kernel/overflowgidand /proc/sys/kernel/overflowuid
这些文件复制文件/ proc / sys / fs / overflowgid和/ proc / sys / fs / overflowuid。
- /proc/sys/kernel/panic
该文件提供对内核变量panic_timeout的读/写访问权限。如果为零,内核将在紧急情况下循环;如果非零,则表示内核应在此秒数后自动重新引导。使用软件看门狗设备驱动程序时,建议设置为60。
- /proc/sys/kernel/panic_on_oops(since Linux 2.5.68)
当遇到oops或BUG时,此文件控制内核的行为。如果此文件包含0,则系统尝试继续操作。如果它包含1,则系统会延迟几秒钟(给klogd时间记录oops输出),然后出现紧急情况。如果/ proc / sys / kernel / panic文件也不为零,则计算机将重新启动。
- /proc/sys/kernel/pid_max(since Linux 2.5.34)
该文件指定PID环绕的值(即,该文件中的值比最大PID大1)。大于此值的PID不会分配;因此,此文件中的值还充当系统范围内进程和线程总数的限制。此文件的默认值32768导致PID范围与早期内核相同。在32位平台上,pid_max的最大值为32768。在64位系统上,可以将pid_max设置为最大2 ^ 22的任何值(PID_MAX_LIMIT,大约为400万)。
- /proc/sys/kernel/powersave-nap(PowerPC only)
该文件包含一个标志。如果设置,Linux-PPC将使用"小睡"模式进行节能,否则将使用"打ze"模式。
- /proc/sys/kernel/printk
请参见syslog(2)。
- /proc/sys/kernel/pty(since Linux 2.6.4)
该目录包含两个与系统上的UNIX 98伪终端(请参阅pts(4))数量有关的文件。
- /proc/sys/kernel/pty/max
此文件定义伪终端的最大数量。
- /proc/sys/kernel/pty/nr
该只读文件指示当前正在使用多少个伪终端。
- /proc/sys/kernel/random
该目录包含各种参数,这些参数控制文件/ dev / random的操作。有关更多信息,请参见random(4)。
- /proc/sys/kernel/random/uuid(since Linux 2.4)
从此只读文件中进行的每次读取都将以标准UUID格式的字符串形式返回随机生成的128位UUID。
- /proc/sys/kernel/randomize_va_space(since Linux 2.6.12)
选择系统的地址空间布局随机化(ASLR)策略(在支持ASLR的体系结构上)。此文件支持三个值:
- 0
关闭ASLR。对于不支持ASLR的体系结构,以及使用norandmaps参数引导内核时,这是默认设置。
- 1
使mmap(2)分配的地址,堆栈和VDSO页面随机化。除其他外,这意味着共享库将在随机地址处加载。 PIE链接的二进制文件的文本段也将加载到随机地址。如果内核是使用CONFIG_COMPAT_BRK配置的,则此值为默认值。
- 2
(从Linux 2.6.25开始)还支持堆随机化。如果未使用CONFIG_COMPAT_BRK配置内核,则此值为默认值。
- /proc/sys/kernel/real-root-dev
该文件记录在Linux内核源文件Documentation / admin-guide / initrd.rst(或Linux 4.10之前的Documentation / initrd.txt)中。
- /proc/sys/kernel/reboot-cmd(Sparc only)
该文件似乎是为SPARC ROM / Flash引导加载程序提供参数的一种方式。也许告诉它重启后该怎么办?
- /proc/sys/kernel/rtsig-max
(仅在2.6.7及以下的内核中;请参见setrlimit(2))。该文件可用于调整系统中可能存在的最大POSIX实时(排队)信号的数量。
- /proc/sys/kernel/rtsig-nr
(仅在2.6.7及以下的内核中。)此文件显示当前排队的POSIX实时信号的数量。
- /proc/[pid]/sched_autogroup_enabled(since Linux 2.6.38)
参见sched(7)。
- /proc/sys/kernel/sched_child_runs_first(since Linux 2.6.23)
如果此文件包含零值,则在fork(2)之后,首先在CPU上调度父对象。如果文件包含非零值,则首先在CPU上调度子项。 (当然,在多处理器系统上,父级和子级都可以立即在CPU上进行调度。)
- /proc/sys/kernel/sched_rr_timeslice_ms(since Linux 3.9)
参见sched_rr_get_interval(2)。
- /proc/sys/kernel/sched_rt_period_us(since Linux 2.6.25)
参见sched(7)。
- /proc/sys/kernel/sched_rt_runtime_us(since Linux 2.6.25)
参见sched(7)。
- /proc/sys/kernel/seccomp(since Linux 4.14)
该目录提供了其他seccomp信息和配置。有关更多详细信息,请参见seccomp(2)。
- /proc/sys/kernel/sem(since Linux 2.4)
该文件包含4个数字,用于定义System V IPC信号量的限制。这些字段的顺序为:
- SEMMSL
每个信号量集的最大信号量。
- SEMMNS
全系统范围内所有信号量集中的信号量数量。
- SEMOPM
semop(2)调用中可以指定的最大操作数。
- SEMMNI
全系统范围内的信号灯标识符的最大数量。
- /proc/sys/kernel/sg-big-buff
该文件显示了通用SCSI设备(sg)缓冲区的大小。您尚不能对其进行调整,但是可以在编译时通过编辑include / scsi / sg.h并更改SG_BIG_BUFF的值来对其进行调整。但是,应该没有任何理由更改此值。
- /proc/sys/kernel/shm_rmid_forced(since Linux 3.1)
如果此文件设置为1,则在附加的进程数降至零时,所有System V共享内存段都将被标记为销毁;否则,该段为0。换句话说,不再可能创建独立于任何附加进程而存在的共享内存段。
效果就像在所有现有段以及将来创建的所有段上执行shmctl(2)IPC_RMID一样(直到将此文件重置为0)。请注意,当此文件设置为1时,没有进程附加的现有段将被立即销毁。设置此选项还将销毁用shmget(2)创建该段的进程终止后创建但从未附加的段)。
将此文件设置为1可提供一种方法,以确保至少在一个进程的资源使用情况和资源限制(请参阅getrlimit(2)中的RLIMIT_AS描述)中对所有System V共享内存段进行计数。
因为将此文件设置为1会产生不规范的行为,并且还可能破坏现有的应用程序,所以此文件中的默认值为0。仅当您充分了解使用System V共享内存的应用程序的语义时,才将该文件设置为1在您的系统上。
- /proc/sys/kernel/shmall(since Linux 2.2)
该文件包含系统范围内System V共享内存的总页数限制。
- /proc/sys/kernel/shmmax(since Linux 2.2)
此文件可用于查询和设置对可创建的最大(System V IPC)共享内存段大小的运行时限制。内核现在支持高达1 GB的共享内存段。此值默认为SHMMAX。
- /proc/sys/kernel/shmmni(since Linux 2.4)
该文件指定了系统范围内可以创建的System V共享内存段的最大数目。
- /proc/sys/kernel/sysctl_writes_strict(since Linux 3.16)
The value in this file determines how the file offset affects
the behavior of updating entries in files under
/proc/sys.The file has three possible values:
- /proc/sys/kernel/sysrq
该文件控制允许由SysRq键调用的功能。默认情况下,该文件包含1,表示每个可能的SysRq请求都被允许(在较早的内核版本中,SysRq默认情况下处于禁用状态,并且您需要在运行时专门启用它,但现在不再是这种情况)。该文件中的可能值为:
- 0
完全禁用sysrq
- 1
启用sysrq的所有功能
- > 1
允许的sysrq函数的位掩码,如下所示:
- 2
启用控制台日志记录级别的控制
- 4
启用键盘控制(SAK,展开)
- 8
启用进程等的调试转储。
- 16
启用同步命令
- 32
启用重新挂载为只读
- 64
启用进程信号(术语,终止,oom-kill)
- 128
允许重启/关机
- 256
允许同步所有实时任务
仅当启用CONFIG_MAGIC_SYSRQ内核配置选项时,此文件才存在。有关更多详细信息,请参见Linux内核源文件Documentation / admin-guide / sysrq.rst(或Linux 4.10之前的Documentation / sysrq.txt)。
- /proc/sys/kernel/version
该文件包含一个字符串,例如:
#5 Wed Feb 25 21:49:24 MET 1998
"#5"表示这是从该源库构建的第五个内核,其后的日期表示构建内核的时间。
- /proc/sys/kernel/threads-max(since Linux 2.3.11)
该文件指定系统范围内可以在系统上创建的线程(任务)数量的限制。
从Linux 4.1开始,可以写入threads-max的值是有界的。可以写入的最小值为20。可以写入的最大值由常数FUTEX_TID_MASK(0x3fffffff)给出。如果将超出此范围的值写入threads-max,则会发生错误EINVAL。
对照可用的RAM页面检查写入的值。如果线程结构将占用过多的可用RAM页(超过1/8),则会相应地减少thread-max。
- /proc/sys/kernel/yama/ptrace_scope(since Linux 3.5)
请参见ptrace(2)。
- /proc/sys/kernel/zero-paged(PowerPC only)
该文件包含一个标志。启用后(非零),Linux-PPC将在空闲循环中将页面预置零,从而可能加快get_free_pages的速度。
- /proc/sys/net
- /proc/sys/net/core/bpf_jit_enable
参见bpf(2)。
- /proc/sys/net/core/somaxconn
- /proc/sys/proc
该目录可能为空。
- /proc/sys/sunrpc
该目录支持网络文件系统(NFS)的Sun远程过程调用。在某些系统上,它不存在。
- /proc/sys/user(since Linux 4.9)
参见名称空间(7)。
- /proc/sys/vm
该目录包含用于内存管理调整,缓冲区和缓存管理的文件。
- /proc/sys/vm/admin_reserve_kbytes(since Linux 3.10)
该文件定义系统上应为具有CAP_SYS_ADMIN功能的用户保留的可用内存量(以KiB为单位)。
此文件中的默认值是[3%的可用页面8MiB]中的最小值,表示为KiB。默认值旨在在默认的过量使用``猜测''模式(即/ proc / sys / vm / overcommit_memory中为0)下为超级用户提供足够的登录和终止进程的权限。
以"永不过量使用"模式运行的系统(即,/ proc / sys / vm / overcommit_memory中为2)应增加此文件中的值,以说明用于恢复的程序的完整虚拟内存大小(例如,login(1) ssh(1)和top(1))否则,超级用户可能无法登录以恢复系统。例如,在x86-64上,合适的值为131072(保留128MiB)。
每当应用程序请求内存时,更改此文件中的值都会生效。
- /proc/sys/vm/compact_memory(since Linux 2.6.35)
将1写入此文件时,将压缩所有区域,以便在可能的情况下在连续的块中提供可用内存。通过查看/ proc / buddyinfo可以看到此操作的效果。
仅当内核配置有CONFIG_COMPACTION时显示。
- /proc/sys/vm/drop_caches(since Linux 2.6.16)
写入此文件会导致内核从内存中删除干净的缓存,牙科和索引节点,从而导致该内存变为可用。这对于内存管理测试和执行可重现的文件系统基准测试很有用。由于写入此文件会导致失去缓存的好处,因此会降低整体系统性能。
要释放页面缓存,请使用:
回声1> / proc / sys / vm / drop_caches
要释放牙齿和索引节点,请使用:
回声2> / proc / sys / vm / drop_caches
要释放页面缓存,牙科和索引节点,请使用:
回声3> / proc / sys / vm / drop_caches
由于写入此文件是非破坏性操作,脏对象不可释放,因此用户应首先运行sync(1)。
- /proc/sys/vm/legacy_va_layout(since Linux 2.6.9)
如果非零,则禁用新的32位内存映射布局;内核将对所有进程使用旧版(2.4)布局。
- /proc/sys/vm/memory_failure_early_kill(since Linux 2.6.32)
控制当硬件在后台检测到内核无法处理的未纠正的内存错误(通常是内存模块中的2位错误)时,如何终止进程。在某些情况下(例如页面在磁盘上仍具有有效副本),内核将透明地处理故障,而不影响任何应用程序。但是,如果没有其他最新数据副本,它将杀死进程以防止传播任何数据损坏。
该文件具有以下值之一:
- 1:
一旦检测到损坏,请杀死所有映射了损坏且不可重新加载的页面的进程。请注意,某些类型的页面(例如内核内部分配的数据或交换缓存)不支持此功能,但适用于大多数用户页面。
- 0:
从所有进程中取消映射损坏的页面,并仅在尝试访问该页面时才杀死该进程。
使用si_code设置为BUS_MCEERR_AO的SIGBUS信号执行终止操作。流程可以根据需要进行处理。有关更多详细信息,请参见sigaction(2)。
此功能仅在具有高级机器检查处理能力的体系结构/平台上有效,并且取决于硬件功能。
应用程序可以使用prctl(2)PR_MCE_KILL操作单独覆盖memory_failure_early_kill设置。
仅当内核配置有CONFIG_MEMORY_FAILURE时显示。
- /proc/sys/vm/memory_failure_recovery(since Linux 2.6.32)
启用内存故障恢复(在平台支持时)。
- 1:
尝试恢复。
- 0:
总是对内存故障感到惊慌。
仅当内核配置有CONFIG_MEMORY_FAILURE时显示。
- /proc/sys/vm/oom_dump_tasks(since Linux 2.6.25)
当内核执行OOM杀死操作时,可以生成系统范围的任务转储(不包括内核线程)。转储包含每个任务(线程,进程)的以下信息:线程ID,真实用户ID,线程组ID(进程ID),虚拟内存大小,居民集大小,任务计划的CPU,oom_adj得分(请参阅/ proc / [pid] / oom_adj的说明)和命令名称。这有助于确定为什么调用OOM杀手,并确定导致它的流氓任务。
如果其中包含零值,那么将禁止显示此信息。在具有数千个任务的超大型系统上,为每个任务转储内存状态信息可能是不可行的。当可能不需要这些信息时,不应强迫此类系统在OOM情况下导致性能下降。
如果将其设置为非零,则无论何时OOM杀手实际终止占用内存的任务,都会显示此信息。
默认值为0。
- /proc/sys/vm/oom_kill_allocating_task(since Linux 2.6.24)
这在内存不足的情况下启用或禁用杀死OOM触发任务。
如果将其设置为零,则OOM杀手将扫描整个任务列表,并根据启发式方法选择要杀死的任务。通常,这会选择流氓的内存占用任务,该任务在被杀死时会释放大量内存。
如果将其设置为非零,则OOM杀手会简单地杀死触发内存不足情况的任务。这避免了可能昂贵的任务列表扫描。
如果/ proc / sys / vm / panic_on_oom不为零,则它优先于/ proc / sys / vm / oom_kill_allocating_task中使用的任何值。
默认值为0。
- /proc/sys/vm/overcommit_kbytes(since Linux 3.14)
当/ proc / sys / vm / overcommit_memory值为2时,此可写文件提供了/ proc / sys / vm / overcommit_ratio的替代方法来控制CommitLimit。它允许将过量使用的内存量指定为绝对值(以kB为单位) ),而不是像overcommit_ratio那样以百分比表示。这样可以在内存容量极大的系统上对CommitLimit进行更细粒度的控制。
overcommit_kbytes或overcommit_ratio中只有一个可以起作用:如果overcommit_kbytes具有非零值,则将其用于计算CommitLimit,否则将使用overcommit_ratio。向这些文件中的任何一个写入值都会导致另一个文件中的值设置为零。
- /proc/sys/vm/overcommit_memory
该文件包含内核虚拟内存记帐模式。值是:
0:启发式过量使用(这是默认设置)
1:总是过量使用,从不检查
2:始终检查,永不过度使用
在模式0下,不检查使用MAP_NORESERVE调用mmap(2),并且默认检查非常弱,导致存在使进程" OOM终止"的风险。
在模式1中,内核假装总是有足够的内存,直到内存实际用完为止。这种模式的一个用例是采用大型稀疏阵列的科学计算应用程序。在2.6.0之前的Linux内核版本中,任何非零值都表示模式1。
在模式2(自Linux 2.6起可用)中,可以分配的总虚拟地址空间(/ proc / meminfo中的ComitLimit)计算为
CommitLimit ==(total_RAM -total_huge_TLB)*
overcommit_ratio / 100 + total_swap其中:
- *
total_RAM是系统上RAM的总量;
- *
total_huge_TLB是为大页面预留的内存量;
- *
overcommit_ratio是/ proc / sys / vm / overcommit_ratio中的值;和
- *
total_swap是交换空间的数量。
例如,在具有16 GB物理RAM,16 GB交换空间,没有专用于大页面的空间以及overcommit_ratio为50的系统上,此公式得出的CommitLimit为24 GB。
从Linux 3.14开始,如果/ proc / sys / vm / overcommit_kbytes中的值非零,则将CommitLimit计算为:
CommitLimit =过量提交千字节+总计交换
另请参见/ proc / sys / vm / admin_reserve_kbytes和/ proc / sys / vm / user_reserve_kbytes的说明。
- /proc/sys/vm/overcommit_ratio(since Linux 2.6.0)
该可写文件定义了内存过量使用的百分比。文件中的默认值为50。请参见/ proc / sys / vm / overcommit_memory的说明。
- /proc/sys/vm/panic_on_oom(since Linux 2.6.18)
这在内存不足的情况下启用或禁用内核崩溃。
如果此文件的值设置为0,则内核的OOM-killer将杀死某些恶意进程。通常,OOM杀手可以杀死流氓进程,并且系统可以生存。
如果将此文件设置为值1,则通常在发生内存不足时内核会出现紧急情况。但是,如果某个进程使用内存策略(mbind(2)MPOL_BIND)或cpusets(cpuset(7))限制了对某些节点的分配,并且这些节点达到内存耗尽状态,则OOM杀手可能会杀死一个进程。在这种情况下不会发生紧急情况:因为其他节点的内存可能已空闲,这意味着整个系统可能尚未达到内存不足的情况。
如果将此文件设置为值2,则在内存不足的情况下,内核始终会出现紧急情况。
默认值为0。1和2用于群集的故障转移。根据您的故障转移策略选择。
- /proc/sys/vm/swappiness
该文件中的值控制内核将多积极地交换内存页面。较高的值会增加攻击性,较低的值会降低攻击性。默认值为60。
- /proc/sys/vm/user_reserve_kbytes(since Linux 3.10)
指定要为用户进程保留的内存量(以KiB为单位)。这样做是为了防止用户启动单个内存占用过程,以使他们无法恢复(杀死内存)。仅当/ proc / sys / vm / overcommit_memory设置为2("永不过量提交"模式)时,此文件中的值才有效。在这种情况下,系统保留的内存量至少为[当前进程大小的3%,user_reserve_kbytes]。
此文件中的默认值是[3%的可用页面,128MiB]中的最小值,表示为KiB。
如果此文件中的值设置为零,则将允许用户通过单个进程分配所有可用内存(减去/ proc / sys / vm / admin_reserve_kbytes保留的数量)。任何随后的执行命令的尝试都将导致" fork:无法分配内存"。
每当应用程序请求内存时,更改此文件中的值都会生效。
- /proc/sys/vm/unprivileged_userfaultfd(since Linux 5.2)
该(可写)文件公开一个标志,该标志控制是否允许非特权进程使用userfaultfd(2)。如果此文件的值为1,则非特权进程可以使用userfaultfd(2)。如果此文件的值为0,则只有具有CAP_SYS_PTRACE功能的进程才能使用userfaultfd(2)。该文件的默认值为1。
- /proc/sysrq-trigger(since Linux 2.4.21)
向此文件中写入字符会触发与键入ALT-SysRq-相同的SysRq功能(请参阅/ proc / sys / kernel / sysrq的说明)。该文件通常只能由root写入。有关更多详细信息,请参见Linux内核源文件Documentation / admin-guide / sysrq.rst(或Linux 4.10之前的Documentation / sysrq.txt)。
- /proc/sysvipc
包含伪文件msg,sem和shm的子目录。这些文件列出了系统上当前存在的System V进程间通信(IPC)对象(分别:消息队列,信号量和共享内存),提供了与可通过ipcs(1)获得的信息类似的信息。这些文件具有标头,并且已进行了格式化(每行一个IPC对象),以便于理解。 sysvipc(7)为这些文件显示的信息提供了进一步的背景信息。
- /proc/thread-self(since Linux 3.17)
该目录是指访问/ proc文件系统的线程,并且与同一线程的进程线程ID([tid])命名的/ proc / self / task / [tid]目录相同。
- /proc/timer_list(since Linux 2.6.21)
该只读文件以人类可读的形式公开了所有当前待处理(高分辨率)计时器,所有时钟事件源及其参数的列表。
- /proc/timer_stats(from Linux 2.6.21 until Linux 4.10)
这是一种调试工具,用于使内核和用户空间开发人员可以在Linux系统中使用计时器(滥用)。内核和用户空间开发人员可以使用它来验证其代码没有过度使用计时器。目的是避免不必要的唤醒,从而优化功耗。
如果在内核(CONFIG_TIMER_STATS)中启用但未使用,则它的运行时开销几乎为零,而数据结构开销则相对较小。即使在运行时启用了收集,开销也很低:所有锁定均按CPU进行,并且对哈希进行哈希处理。
/ proc / timer_stats文件既用于控制采样工具,又用于读取采样信息。
启动时timer_stats功能无效。可以使用以下命令开始采样周期:
# echo 0 > /proc/timer_stats
以下命令停止采样周期:
$ cat /proc/timer_stats
可以通过以下方式检索统计信息:
$ cat /proc/timer_stats Timer Stats Version: v0.3 Sample period: 1.764 s Collection: active 255, 0 swapper/3 hrtimer_start_range_ns (tick_sched_timer) 71, 0 swapper/1 hrtimer_start_range_ns (tick_sched_timer) 58, 0 swapper/0 hrtimer_start_range_ns (tick_sched_timer) 4, 1694 gnome-shell mod_delayed_work_on (delayed_work_timer_fn) 17, 7 rcu_sched rcu_gp_kthread (process_timeout) ... 1, 4911 kworker/u16:0 mod_delayed_work_on (delayed_work_timer_fn) 1D, 2522 kworker/0:0 queue_delayed_work_on (delayed_work_timer_fn) 1029 total events, 583.333 events/sec
启用采样后,从/ proc / timer_stats读取的每个数据都会看到新近更新的统计信息。禁用采样后,将保留采样信息,直到开始新的采样周期为止。这允许多个读数。
来自/ proc / timer_stats的示例输出:
Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994
输出列为:
- *
一个事件数的计数,如果是可延迟的计时器,则可以选择(自Linux 2.6.23起),后跟字母aqDaq;
- *
初始化计时器的进程的PID;
- *
初始化计时器的进程的名称;
- *
计时器初始化的功能;和
- *
(用括号括起来)与计时器关联的回调函数。
在Linux 4.11开发周期中,出于安全方面的考虑,该文件已被删除,因为该文件会在各个命名空间中公开信息。此外,可以通过内核跟踪工具(例如ftrace)获得相同的信息。
- /proc/tty
包含伪驱动程序和行规程的伪文件和子目录的子目录。
- /proc/uptime
该文件包含两个数字(以秒为单位的值):系统的正常运行时间(包括挂起所花费的时间)和空闲过程所花费的时间。
- /proc/version
该字符串标识当前正在运行的内核版本。它包含/ proc / sys / kernel / ostype,/ proc / sys / kernel / osrelease和/ proc / sys / kernel / version的内容。例如:
$ cat file | tr aq##代码##0aq aq\naq
- /proc/vmstat(since Linux 2.6.0)
此文件显示各种虚拟内存统计信息。该文件的每一行都包含一个名称/值对,以空格分隔。仅当内核配置了适当的选项时,才会显示某些行。 (在某些情况下,特定文件所需的选项在内核版本之间有所变化,因此未在此处列出。有关详细信息,请查阅内核源代码。)可能存在以下字段:
- nr_free_pages(since Linux 2.6.31)
- nr_alloc_batch(since Linux 3.12)
- nr_inactive_anon(since Linux 2.6.28)
- nr_active_anon(since Linux 2.6.28)
- nr_inactive_file(since Linux 2.6.28)
- nr_active_file(since Linux 2.6.28)
- nr_unevictable(since Linux 2.6.28)
- nr_mlock(since Linux 2.6.28)
- nr_anon_pages(since Linux 2.6.18)
- nr_mapped(since Linux 2.6.0)
- nr_file_pages(since Linux 2.6.18)
- nr_dirty(since Linux 2.6.0)
- nr_writeback(since Linux 2.6.0)
- nr_slab_reclaimable(since Linux 2.6.19)
- nr_slab_unreclaimable(since Linux 2.6.19)
- nr_page_table_pages(since Linux 2.6.0)
- nr_kernel_stack(since Linux 2.6.32)
分配给内核堆栈的内存量。
- nr_unstable(since Linux 2.6.0)
- nr_bounce(since Linux 2.6.12)
- nr_vmscan_write(since Linux 2.6.19)
- nr_vmscan_immediate_reclaim(since Linux 3.2)
- nr_writeback_temp(since Linux 2.6.26)
- nr_isolated_anon(since Linux 2.6.32)
- nr_isolated_file(since Linux 2.6.32)
- nr_shmem(since Linux 2.6.32)
shmem和tmpfs(5)使用的页面。
- nr_dirtied(since Linux 2.6.37)
- nr_written(since Linux 2.6.37)
- nr_pages_scanned(since Linux 3.17)
- numa_hit(since Linux 2.6.18)
- numa_miss(since Linux 2.6.18)
- numa_foreign(since Linux 2.6.18)
- numa_interleave(since Linux 2.6.18)
- numa_local(since Linux 2.6.18)
- numa_other(since Linux 2.6.18)
- workingset_refault(since Linux 3.15)
- workingset_activate(since Linux 3.15)
- workingset_nodereclaim(since Linux 3.15)
- nr_anon_transparent_hugepages(since Linux 2.6.38)
- nr_free_cma(since Linux 3.7)
空闲CMA(连续内存分配器)页面的数量。
- nr_dirty_threshold(since Linux 2.6.37)
- nr_dirty_background_threshold(since Linux 2.6.37)
- pgpgin(since Linux 2.6.0)
- pgpgout(since Linux 2.6.0)
- pswpin(since Linux 2.6.0)
- pswpout(since Linux 2.6.0)
- pgalloc_dma(since Linux 2.6.5)
- pgalloc_dma32(since Linux 2.6.16)
- pgalloc_normal(since Linux 2.6.5)
- pgalloc_high(since Linux 2.6.5)
- pgalloc_movable(since Linux 2.6.23)
- pgfree(since Linux 2.6.0)
- pgactivate(since Linux 2.6.0)
- pgdeactivate(since Linux 2.6.0)
- pgfault(since Linux 2.6.0)
- pgmajfault(since Linux 2.6.0)
- pgrefill_dma(since Linux 2.6.5)
- pgrefill_dma32(since Linux 2.6.16)
- pgrefill_normal(since Linux 2.6.5)
- pgrefill_high(since Linux 2.6.5)
- pgrefill_movable(since Linux 2.6.23)
- pgsteal_kswapd_dma(since Linux 3.4)
- pgsteal_kswapd_dma32(since Linux 3.4)
- pgsteal_kswapd_normal(since Linux 3.4)
- pgsteal_kswapd_high(since Linux 3.4)
- pgsteal_kswapd_movable(since Linux 3.4)
- pgsteal_direct_dma
- pgsteal_direct_dma32(since Linux 3.4)
- pgsteal_direct_normal(since Linux 3.4)
- pgsteal_direct_high(since Linux 3.4)
- pgsteal_direct_movable(since Linux 2.6.23)
- pgscan_kswapd_dma
- pgscan_kswapd_dma32(since Linux 2.6.16)
- pgscan_kswapd_normal(since Linux 2.6.5)
- pgscan_kswapd_high
- pgscan_kswapd_movable(since Linux 2.6.23)
- pgscan_direct_dma
- pgscan_direct_dma32(since Linux 2.6.16)
- pgscan_direct_normal
- pgscan_direct_high
- pgscan_direct_movable(since Linux 2.6.23)
- pgscan_direct_throttle(since Linux 3.6)
- zone_reclaim_failed(since linux 2.6.31)
- pginodesteal(since linux 2.6.0)
- slabs_scanned(since linux 2.6.5)
- kswapd_inodesteal(since linux 2.6.0)
- kswapd_low_wmark_hit_quickly(since 2.6.33)
- kswapd_high_wmark_hit_quickly(since 2.6.33)
- pageoutrun(since Linux 2.6.0)
- allocstall(since Linux 2.6.0)
- pgrotated(since Linux 2.6.0)
- drop_pagecache(since Linux 3.15)
- drop_slab(since Linux 3.15)
- numa_pte_updates(since Linux 3.8)
- numa_huge_pte_updates(since Linux 3.13)
- numa_hint_faults(since Linux 3.8)
- numa_hint_faults_local(since Linux 3.8)
- numa_pages_migrated(since Linux 3.8)
- pgmigrate_success(since Linux 3.8)
- pgmigrate_fail(since Linux 3.8)
- compact_migrate_scanned(since Linux 3.8)
- compact_free_scanned(since Linux 3.8)
- compact_isolated(since Linux 3.8)
- compact_stall(since Linux 2.6.35)
请参阅内核源文件Documentation / admin-guide / mm / transhuge.rst。
- compact_fail(since Linux 2.6.35)
请参阅内核源文件Documentation / admin-guide / mm / transhuge.rst。
- compact_success(since Linux 2.6.35)
请参阅内核源文件Documentation / admin-guide / mm / transhuge.rst。
- htlb_buddy_alloc_success(since Linux 2.6.26)
- htlb_buddy_alloc_fail(since Linux 2.6.26)
- unevictable_pgs_culled(since Linux 2.6.28)
- unevictable_pgs_scanned(since Linux 2.6.28)
- unevictable_pgs_rescued(since Linux 2.6.28)
- unevictable_pgs_mlocked(since Linux 2.6.28)
- unevictable_pgs_munlocked(since Linux 2.6.28)
- unevictable_pgs_cleared(since Linux 2.6.28)
- unevictable_pgs_stranded(since Linux 2.6.28)
- thp_fault_alloc(since Linux 2.6.39)
请参阅内核源文件Documentation / admin-guide / mm / transhuge.rst。
- thp_fault_fallback(since Linux 2.6.39)
请参阅内核源文件Documentation / admin-guide / mm / transhuge.rst。
- thp_collapse_alloc(since Linux 2.6.39)
请参阅内核源文件Documentation / admin-guide / mm / transhuge.rst。
- thp_collapse_alloc_failed(since Linux 2.6.39)
请参阅内核源文件Documentation / admin-guide / mm / transhuge.rst。
- thp_split(since Linux 2.6.39)
请参阅内核源文件Documentation / admin-guide / mm / transhuge.rst。
- thp_zero_page_alloc(since Linux 3.8)
请参阅内核源文件Documentation / admin-guide / mm / transhuge.rst。
- thp_zero_page_alloc_failed(since Linux 3.8)
请参阅内核源文件Documentation / admin-guide / mm / transhuge.rst。
- balloon_inflate(since Linux 3.18)
- balloon_deflate(since Linux 3.18)
- balloon_migrate(since Linux 3.18)
- nr_tlb_remote_flush(since Linux 3.12)
- nr_tlb_remote_flush_received(since Linux 3.12)
- nr_tlb_local_flush_all(since Linux 3.12)
- nr_tlb_local_flush_one(since Linux 3.12)
- vmacache_find_calls(since Linux 3.16)
- vmacache_find_hits(since Linux 3.16)
- vmacache_full_flushes(since Linux 3.19)
- /proc/zoneinfo(since Linux 2.6.13)
此文件显示有关内存区域的信息。这对于分析虚拟内存行为很有用。
备注
许多文件包含内部格式的字符串(例如环境和命令行),并且子字段以空字节(aq \ 0aq)终止。检查此类文件时,如果使用以下形式的命令来显示结果,则可能会发现结果更具可读性:
##代码##该手册页不完整,可能不准确,是需要经常更新的一种。
另外参见
cat(1),dmesg(1),find(1),free(1),htop(1),init(1),ps(1),pstree(1),tr(1),正常运行时间(1), chroot(2),mmap(2),readlink(2),syslog(2),slabinfo(5),sysfs(5),hier(7),名称空间(7),time(7),arp(8), hdparm(8),ifconfig(8),lsmod(8),lspci(8),mount(8),netstat(8),procinfo(8),route(8),sysctl(8)
Linux内核源文件:Documentation / filesystems / proc.txt,Documentation / sysctl / fs.txt,Documentation / sysctl / kernel.txt,Documentation / sysctl / net.txt和Documentation / sysctl / vm.txt。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。