barriers / 阅读 / 详情

/proc文件系统的作用

2023-07-23 21:41:48
共3条回复
coco

proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。它的目录结构如下:

目录名称 目录内容

apm 高级电源管理信息

cmdline 内核命令行

Cpuinfo 关于Cpu信息

Devices 可以用到的设备(块设备/字符设备)

Dma 使用的DMA通道

Filesystems 支持的文件系统

Interrupts 中断的使用

Ioports I/O端口的使用

Kcore 内核核心印象

Kmsg 内核消息

Ksyms 内核符号表

Loadavg 负载均衡

Locks 内核锁

Meminfo 内存信息

Misc 杂项

Modules 加载模块列表

Mounts 加载的文件系统

Partitions 系统识别的分区表

Rtc 实时时钟

Slabinfo Slab池信息

Stat 全面统计状态表

Swaps 对换空间的利用情况

Version 内核版本

Uptime 系统正常运行时间

并不是所有这些目录在你的系统中都有,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和 sys。Sys目录是可写的,可以通过它来访问或修改内核的参数(见下一部分),而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则 scsi目录不存在。

除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。Proc文件系统的名字就是由之而起。进程目录的结构如下:

目录名称 目录内容

Cmdline 命令行参数

Environ 环境变量值

Fd 一个包含所有文件描述符的目录

Mem 进程的内存被利用情况

Stat 进程状态

Status 进程当前状态,以可读的方式显示出来

Cwd 当前工作目录的链接

Exe 指向该进程的执行命令文件

Maps 内存映象

Statm 进程内存状态信息

Root 链接此进程的root目录

用户如果要查看系统信息,可以用cat命令。例如:

# cat /proc/interrupts

CPU0

0: 8728810 XT-PIC timer

1: 895 XT-PIC keyboard

2: 0 XT-PIC cascade

3: 531695 XT-PIC aha152x

4: 2014133 XT-PIC serial

5: 44401 XT-PIC pcnet_cs

8: 2 XT-PIC rtc

11: 8 XT-PIC i82365

12: 182918 XT-PIC Mouse

13: 1 XT-PIC fpu PS/2

14: 1232265 XT-PIC ide0

15: 7 XT-PIC ide1

NMI: 0

用户还可以实现修改内核参数。在/proc文件系统中有一个有趣的目录:/proc/sys。它不仅提供了内核信息,而且可以通过它修改内核参数,来优化你的系统。但是你必须很小心,因为可能会造成系统崩溃。最好是先找一台无关紧要的机子,调试成功后再应用到你的系统上。

要改变内核的参数,只要用vi编辑或echo参数重定向到文件中即可。下面有一个例子:

# cat /proc/sys/fs/file-max

4096

# echo 8192 > /proc/sys/fs/file-max

# cat /proc/sys/fs/file-max

8192

如果你优化了参数,则可以把它们写成添加到文件rc.local中,使它在系统启动时自动完成修改。

/proc文件系统中网络参数

在/proc/sys/net/ipv4/目录下,包含的是和tcp/ip协议相关的各种参数,下面我们就对这些网络参数加以详细的说明。

ip_forward 参数类型:BOOLEAN

0 - 关闭(默认值)

not 0 - 打开ip转发

在网络本地接口之间转发数据报。该参数非常特殊,对该参数的修改将导致其它所有相关配置参数恢复其默认值(对于主机参阅RFC1122,对于路由器参见RFC1812)

ip_default_ttl 参数类型:INTEGER

默认值为 64 。表示IP数据报的Time To Live值。

ip_no_pmtu_disc 参数类型:BOOLEAN

关闭路径MTU探测,默认值为FALSE

ipfrag_high_thresh 参数类型:整型

用来组装分段的IP包的最大内存量。当ipfrag_high_thresh数量的内存被分配来用来组装IP包,则IP分片处理器将丢弃数据报直到ipfrag_low_thresh数量的内存被用来组装IP包。

ipfrag_low_thresh 参数类型:整型

参见ipfrag_high_thresh。

ipfrag_time 参数类型:整型

保存一个IP分片在内存中的时间。

inet_peer_threshold 参数类型:整型

INET对端存储器某个合适值,当超过该阀值条目将被丢弃。该阀值同样决定生存时间以及废物收集通过的时间间隔。条目越多,存活期越低,GC 间隔越短

inet_peer_minttl 参数类型:整型

条目的最低存活期。在重组端必须要有足够的碎片(fragment)存活期。这个最低存活期必须保证缓冲池容积是否少于 inet_peer_threshold。该值以 jiffies为单位测量。

inet_peer_maxttl 参数类型:整型

条目的最大存活期。在此期限到达之后,如果缓冲池没有耗尽压力的话(例如,缓冲池中的条目数目非常少),不使用的条目将会超时。该值以 jiffies为单位测量。

inet_peer_gc_mintime 参数类型:整型

废物收集(GC)通过的最短间隔。这个间隔会影响到缓冲池中内存的高压力。 该值以 jiffies为单位测量。

inet_peer_gc_maxtime 参数类型:整型

废物收集(GC)通过的最大间隔,这个间隔会影响到缓冲池中内存的低压力。 该值以 jiffies为单位测量。

tcp_syn_retries 参数类型:整型

对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右。

tcp_synack_retries 参数类型:整型

对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。

tcp_keepalive_time 参数类型:整型

当keepalive打开的情况下,TCP发送keepalive消息的频率,默认值是2个小时。

tcp_keepalive_probes 参数类型:整型

TCP发送keepalive探测以确定该连接已经断开的次数,默认值是9。

tcp_keepalive_interval 参数类型:整型

探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为75秒,也就是没有活动的连接将在大约11分钟以后将被丢弃。

tcp_retries1 参数类型:整型

当出现可疑情况而必须向网络层报告这个可疑状况之前,需要进行多少次重试。最低的 RFC 数值是 3 ,这也是默认值,根据RTO的值大约在3秒 - 8分钟之间。

tcp_retries2 参数类型:整型

在丢弃激活的TCP连接之前,需要进行多少次重试。RFC1122规定,该值必须大于100秒。默认值为15,根据RTO的值来决定,相当于13-30分钟,

tcp_orphan_retries 参数类型:整型

在近端丢弃TCP连接之前,要进行多少次重试。默认值是 7 个,相当于 50秒 - 16分钟,视 RTO 而定。如果您的系统是负载很大的web服务器,那么也许需要降低该值,这类 sockets 可能会耗费大量的资源。另外参的考 tcp_max_orphans 。

tcp_fin_timeout 参数类型:整型

对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。过去在2.2版本的内核中是 180 秒。您可以设置该值,但需要注意,如果您的机器为负载很重的web服务器,您可能要冒内存被大量无效数据报填满的风险,FIN-WAIT-2 sockets 的危险性低于 FIN-WAIT-1 ,因为它们最多只吃 1.5K 的内存,但是它们存在时间更长。另外参考 tcp_max_orphans。

tcp_max_tw_buckets 参数类型:整型

系统在同时所处理的最大timewait sockets 数目。如果超过此数的话,time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的 DoS 攻击,千万不要人为的降低这个限制,不过,如果网络条件需要比默认值更多,则可以提高它(或许还要增加内存)。

tcp_tw_recycle 参数类型:布尔

打开快速 TIME-WAIT sockets 回收。默认值是1。除非得到技术专家的建议或要求,请不要随意修改这个值。

tcp_max_orphans 参数类型:整型

系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量,那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的 DoS 攻击,千万不要依赖这个或是人为的降低这个限制

tcp_abort_on_overflow 参数类型:布尔

当守护进程太忙而不能接受新的连接,就象对方发送reset消息,默认值是false。这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态。只有在你确信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用。

tcp_syncookies 参数类型:整型

只有在内核编译时选择了CONFIG_SYNCOOKIES时才会发生作用。当出现syn等候队列出现溢出时象对方发送syncookies。目的是为了防止syn flood攻击。默认值是false。

注意:该选项千万不能用于那些没有收到攻击的高负载服务器,如果在日志中出现synflood消息,但是调查发现没有收到synflood攻击,而是合法用户的连接负载过高的原因,你应该调整其它参数来提高服务器性能。参考: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.

syncookie严重的违背TCP协议,不允许使用TCP扩展,可能对某些服务导致严重的性能影响(如SMTP转发)。

tcp_stdurg 参数类型:整型

使用 TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的 BSD解释,因此如果您在 Linux 打开它,或会导致不能和它们正确沟通。默认值为为:FALSE

tcp_max_syn_backlog 参数类型:整型

对于那些依然还未获得客户端确认的连接请求,需要保存在队列中最大数目。对于超过 128Mb 内存的系统,默认值是 1024 ,低于 128Mb 的则为 128。如果服务器经常出现过载,可以尝试增加这个数字。警告!假如您将此值设为大于 1024,最好修改 include/net/tcp.h 里面的 TCP_SYNQ_HSIZE ,以保持 TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog ,并且编进核心之内。

tcp_window_scaling 参数类型:布尔

正常来说,TCP/IP 可以接受最大到65535字节的 windows。对于宽带网络,该值可能是不够的,通过调整该参数有助于提高宽带服务器性能。

tcp_timestamps 参数类型:布尔

Timestamps 用在其它一些东西中,可以防范那些伪造的 sequence 号码。一条1G的宽带线路或许会重遇到带 out-of-line数值的旧sequence 号码(假如它是由于上次产生的)。Timestamp 会让它知道这是个 "旧封包"。

tcp_sack 参数类型:布尔

使用 Selective ACK,它可以用来查找特定的遗失的数据报--- 因此有助于快速恢复状态。

tcp_fack 参数类型:布尔

打开FACK拥塞避免和快速重传功能。

tcp_dsack 参数类型:布尔

允许TCP发送"两个完全相同"的SACK。

tcp_ecn 参数类型:布尔

打开TCP的直接拥塞通告功能。

tcp_reordering 参数类型:整型

TCP流中重排序的数据报最大数量默认值是 3 。

tcp_retrans_collapse 参数类型:布尔

对于某些有bug的打印机提供针对其bug的兼容性。

tcp_wmem - 三个整数的向量: min, default, max

min:为TCP socket预留用于发送缓冲的内存最小值。每个tcp socket都可以在建议以后都可以使用它。默认值为4K。

default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem_default 值,一般要低于net.core.wmem_default的值。默认值为16K。

max: 用于TCP socket发送缓冲的内存最大值。该值不会影响net.core.wmem_max,今天选择参数SO_SNDBUF则不受该值影响。默认值为128K。

tcp_rmem - 三个整数的向量: min, default, max

min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下tcp socket都至少会有这么多数量的内存用于接收缓冲,默认值为8K。

default:为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的 net.core.wmem_default 值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win:0是默认值情况下,tcp 窗口大小为65535。

max:用于TCP socket接收缓冲的内存最大值。该值不会影响 net.core.wmem_max,今天选择参数 SO_SNDBUF则不受该值影响。默认值为 128K。默认值为87380*2 bytes。

tcp_mem - 三个整数的向量: low, pressure, high

low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。

pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。

high:允许所有tcp sockets用于排队缓冲数据报的页面量。

一般情况下这些值是在系统启动时根据系统内存数量计算得到的。

tcp_app_win - 整数

保留max(window/2^tcp_app_win, mss)数量的窗口由于应用缓冲。当为0时表示不需要缓冲。默认值是31。

tcp_adv_win_scale - 整数

计算缓冲开销bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale > 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale <= 0),默认值为2。

ip_local_port_range - 两个整数

定于TCP和UDP使用的本地端口范围,第一个数是开始,第二个数是最后端口号,默认值依赖于系统中可用的内存数:

> 128Mb 32768-61000

< 128Mb 1024-4999 or even less.

该值决定了活动连接的数量,也就是系统可以并发的连接数

icmp_echo_ignore_all - 布尔类型

icmp_echo_ignore_broadcasts - 布尔类型

如果任何一个设置为true(>0)则系统将忽略所有发送给自己的ICMP ECHO请求或那些广播地址的请求。

icmp_destunreach_rate - 整数

icmp_paramprob_rate - 整数

icmp_timeexceed_rate - 整数

icmp_echoreply_rate - 整数(not enabled per default)

限制发向特定目标的ICMP数据报的最大速率。0表示没有任何限制,否则表示jiffies数据单位中允许发送的个数。

icmp_ignore_bogus_error_responses - 布尔类型

某些路由器违背RFC1122标准,其对广播帧发送伪造的响应来应答。这种违背行为通常会被以告警的方式记录在系统日志中。如果该选项设置为True,内核不会记录这种警告信息。默认值为False。

(1) Jiffie: 内核使用的内部时间单位,在i386系统上大小为1/100s,在Alpha中为1/1024S。在/usr/include/asm/param.h中的HZ定义有特定系统的值。

conf/interface/*:

conf/all/*是特定的,用来修改所有接口的设置,is special and changes the settings for all interfaces.

Change special settings per interface.

log_martians - 布尔类型

记录带有不允许的地址的数据报到内核日志中。

accept_redirects - 布尔类型

收发接收ICMP重定向消息。对于主机来说默认为True,对于用作路由器时默认值为False。

forwarding - 布尔类型

在该接口打开转发功能

mc_forwarding - 布尔类型

是否进行多播路由。只有内核编译有CONFIG_MROUTE并且有路由服务程序在运行该参数才有效。

proxy_arp - 布尔类型

打开proxy arp功能。

shared_media - 布尔类型

发送(路由器)或接收(主机) RFC1620 共享媒体重定向。覆盖ip_secure_redirects的值。默认为True。

secure_redirects - 布尔类型

仅仅接收发给默认网关列表中网关的ICMP重定向消息,默认值是TRUE。

send_redirects - 布尔类型

如果是router,发送重定向消息,默认值是TRUE

bootp_relay - 布尔类型

接收源地址为0.b.c.d,目的地址不是本机的数据报。用来支持BOOTP转发服务进程,该进程将捕获并转发该包。默认为False,目前还没有实现。

accept_source_route - 布尔类型

接收带有SRR选项的数据报。对于主机来说默认为False,对于用作路由器时默认值为True。

rp_filter 参数类型

1 - 通过反向路径回溯进行源地址验证(在RFC1812中定义)。对于单穴主机和stub网络路由器推荐使用该选项。

0 - 不通过反向路径回溯进行源地址验证。

默认值为0。某些发布在启动时自动将其打开。

max笔记
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!
理解 Proc 文件系统

--------------------------------------------------------------------------------

作者:王旭 翻译 2004-10-05 18:25:55 来自:linuxfocus

目录:
/proc --- 一个虚拟文件系统
加载 proc 文件系统
察看 /proc 的文件
得到有用的系统/内核信息
有关运行中的进程的信息
通过 /proc 与内核交互
结论
参考文献

摘要:

Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。尽管在各种硬件平台上的 Linux 系统的 /proc 文件系统的基本概念都是相同的,但本文只讨论基于 intel x86 架构的 Linux /proc 文件系统。

_________________ _________________ _________________

/proc --- 一个虚拟文件系统
/proc 文件系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做 /proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中 (on the fly) 改变设置 (通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。如果你察看文件 /proc/mounts (和 mount 命令一样列出所有已经加载的文件系统),你会看到其中 一行是这样的:

grep proc /proc/mounts
/proc /proc proc rw 0 0

/proc 由内核控制,没有承载 /proc 的设备。因为 /proc 主要存放由内核控制的状态信息,所以大部分这些信息的逻辑位置位于内核控制的内存。对 /proc 进行一次 "ls -l" 可以看到大部分文件都是 0 字节大的;不过察看这些文件的时候,确实可以看到一些信息。这怎么可能?这是因为 /proc 文件系统和其他常规的文件系统一样把自己注册到虚拟文件系统层 (VFS) 了。然而,直到当 VFS 调用它,请求文件、目录的 i-node 的时候,/proc 文件系统才根据内核中的信息建立相应的文件和目录。

加载 proc 文件系统
如果系统中还没有加载 proc 文件系统,可以通过如下命令加载 proc 文件系统:

mount -t proc proc /proc

上述命令将成功加载你的 proc 文件系统。更多细节请阅读 mount 命令的 man page。

察看 /proc 的文件
/proc 的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。大部分 /proc 中的文件和目录提供系统物理环境最新的信息。尽管 /proc 中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像"more", "less"或 "cat"这样的程序来查看。当编辑程序试图打开一个虚拟文件时,这个文件就通过内核中的信息被凭空地 (on the fly) 创建了。这是一些我从我的系统中得到的一些有趣结果:

$ ls -l /proc/cpuinfo
-r--r--r-- 1 root root 0 Dec 25 11:01 /proc/cpuinfo

$ file /proc/cpuinfo
/proc/cpuinfo: empty

$ cat /proc/cpuinfo

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 8
model name : Pentium III (Coppermine)
stepping : 6
cpu MHz : 1000.119
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
sep_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips : 1998.85

processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 8
model name : Pentium III (Coppermine)
stepping : 6
cpu MHz : 1000.119
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
sep_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr xmm
bogomips : 1992.29

这是一个从双 CPU 的系统中得到的结果,上述大部分的信息十分清楚地给出了这个系统的有用的硬件信息。有些 /proc 的文件是经过编码的,不同的工具可以被用来解释这些编码过的信息并输出成可读的形式。这样的工具包括:"top", "ps", "apm" 等。

得到有用的系统/内核信息

proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件:

/proc/cpuinfo - CPU 的信息 (型号, 家族, 缓存大小等)
/proc/meminfo - 物理内存、交换空间等的信息
/proc/mounts - 已加载的文件系统的列表
/proc/devices - 可用设备的列表
/proc/filesystems - 被支持的文件系统
/proc/modules - 已加载的模块
/proc/version - 内核版本
/proc/cmdline - 系统启动时输入的内核命令行参数
proc 中的文件远不止上面列出的这么多。想要进一步了解的读者可以对 /proc 的每一个文件都"more"一下或读参考文献[1]获取更多的有关 /proc 目录中的文件的信息。我建议使用"more"而不是"cat",除非你知道这个文件很小,因为有些文件 (比如 kcore) 可能会非常长。

有关运行中的进程的信息
/proc 文件系统可以用于获取运行中的进程的信息。在 /proc 中有一些编号的子目录。每个编号的目录对应一个进程 id (PID)。这样,每一个运行中的进程 /proc 中都有一个用它的 PID 命名的目录。这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件。让我们试着查找一个运行中的进程。

$ ps -aef | grep mozilla
root 32558 32425 8 22:53 pts/1 00:01:23 /usr/bin/mozilla

上述命令显示有一个正在运行的 mozilla 进程的 PID 是 32558。相对应的,/proc 中应该有一个名叫 32558 的目录

$ ls -l /proc/32558
total 0
-r--r--r-- 1 root root 0 Dec 25 22:59 cmdline
-r--r--r-- 1 root root 0 Dec 25 22:59 cpu
lrwxrwxrwx 1 root root 0 Dec 25 22:59 cwd -> /proc/
-r-------- 1 root root 0 Dec 25 22:59 environ
lrwxrwxrwx 1 root root 0 Dec 25 22:59 exe -> /usr/bin/mozilla*
dr-x------ 2 root root 0 Dec 25 22:59 fd/
-r--r--r-- 1 root root 0 Dec 25 22:59 maps
-rw------- 1 root root 0 Dec 25 22:59 mem
-r--r--r-- 1 root root 0 Dec 25 22:59 mounts
lrwxrwxrwx 1 root root 0 Dec 25 22:59 root -> //
-r--r--r-- 1 root root 0 Dec 25 22:59 stat
-r--r--r-- 1 root root 0 Dec 25 22:59 statm
-r--r--r-- 1 root root 0 Dec 25 22:59 status

文件 "cmdline" 包含启动进程时调用的命令行。"envir" 进程的环境变两。 "status" 是进程的状态信息,包括启动进程的用户的用户ID (UID) 和组ID(GID) ,父进程ID (PPID),还有进程当前的状态,比如"Sleelping"和"Running"。每个进程的目录都有几个符号链接,"cwd"是指向进程当前工作目录的符号链接,"exe"指向运行的进程的可执行程序,"root"指向被这个进程看作是根目录的目录 (通常是"/")。目录"fd"包含指向进程使用的文件描述符的链接。 "cpu"仅在运行 SMP 内核时出现,里面是按 CPU 划分的进程时间。

/proc/self 是一个有趣的子目录,它使得程序可以方便地使用 /proc 查找本进程地信息。/proc/self 是一个链接到 /proc 中访问 /proc 的进程所对应的 PID 的目录的符号链接。

通过 /proc 与内核交互

上面讨论的大部分 /proc 的文件是只读的。而实际上 /proc 文件系统通过 /proc 中可读写的文件提供了对内核的交互机制。写这些文件可以改变内核的状态,因而要慎重改动这些文件。/proc/sys 目录存放所有可读写的文件的目录,可以被用于改变内核行为。

/proc/sys/kernel - 这个目录包含反通用内核行为的信息。 /proc/sys/kernel/{domainname, hostname} 存放着机器/网络的域名和主机名。这些文件可以用于修改这些名字。

$ hostname
machinename.d********.com

$ cat /proc/sys/kernel/domainname
d********.com

$ cat /proc/sys/kernel/hostname
machinename

$ echo "new-machinename" > /proc/sys/kernel/hostname

$ hostname
new-machinename.d********.com

这样,通过修改 /proc 文件系统中的文件,我们可以修改主机名。很多其他可配置的文件存在于 /proc/sys/kernel/。这里不可能列出所有这些文件,读者可以自己去这个目录查看以得到更多细节信息。
另一个可配置的目录是 /proc/sys/net。这个目录中的文件可以用于修改机器/网络的网络属性。比如,简单修改一个文件,你可以在网络上瘾藏匿的计算机。

$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

这将在网络上瘾藏你的机器,因为它不响应 icmp_echo。主机将不会响应其他主机发出的 ping 查询。

$ ping machinename.d********.com
no answer from machinename.d********.com

要改回缺省设置,只要

$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

/proc/sys 下还有许多其它可以用于改变内核属性。读者可以通过参考文献 [1], [2] 获取更多信息。

结论
/proc 文件系统提供了一个基于文件的 Linux 内部接口。它可以用于确定系统的各种不同设备和进程的状态。对他们进行配置。因而,理解和应用有关这个文件系统的知识是理解你的 Linux 系统的关键。

参考文献

[1] 有关Linux proc 文件系统的文档位于: /usr/src/linux/Documentation/filesystems/proc.txt

[2] RedHat Guide: The /proc File System: http://www.r****.com/docs/manuals/linux/RHL-7.3-Manual/ref-guide/ch-proc.html
左迁
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!

proc 文件系统

在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc

文件系统。最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的东西报告的内核使用,例如/proc/modules

有模块的列表/proc/meminfo 有内存使用的统计表。

  使用proc 文件系统的方法和使用设备驱动程序非常相似--创建一个/proc

文件需要的所有信息的结构,包括任何处理函数的指针(在我们的例子中只有一个,当某人试图从/proc

文件读时调用的那一个)。然后,init_module 在内核中登记该结构而cleanup_module 注销它。

  我们使用proc_register_dynamic(这是在2.0 版中的情况,在2.2 版中如果我们将节点设置为0系统将自动为我们做到)

的原因是我们不想预先决定我们的文件的节点数字,而是为防止冲突而由内核决定它。通常的文件系统存在于磁盘上而不是内存中(/proc

在内存中),在这中情况下,节点数是是指向文件的索引节点所在的磁盘位置的指针。节点包含文件的信息(例如文件的存取权限)和指向磁盘位置或文件数据可以

被找到的几个位置的指针。

  因为当文件被打开或关闭的时候不能得到调用,所以在这个模块中没有地方放置MOD_INC_USE_COUNT

和MOD_DEC_USE_COUNT,并且,如果文件被打开随后模块被移除,我们没有办法避免后果。在下一章我们会看到一个艰难的但更灵活的可以处理

/proc文件的实现方式,它也可以让我们防止那个问题。

Linux 内核提供了一种通过/proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。尽管在各种硬件平台上的Linux

系统的/proc 文件系统的基本概念都是相同的,但本文只讨论基于intel x86 架构的Linux /proc 文件系统。

_________________ _________________ _________________

/proc --- 一个虚拟文件系统

/proc 文件系统是一种内核和内核模块用来向进程(process)

发送信息的机制(所以叫做/proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中(on the

fly) 改变设置(通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。如果你察看文件/proc/mounts

(和mount 命令一样列出所有已经加载的文件系统),你会看到其中 一行是这样的:

grep proc /proc/mounts

/proc /proc proc rw 0 0

/proc 由内核控制,没有承载/proc 的设备。因为/proc

主要存放由内核控制的状态信息,所以大部分这些信息的逻辑位置位于内核控制的内存。对/proc 进行一次"ls -l" 可以看到大部分文件都是0

字节大的;不过察看这些文件的时候,确实可以看到一些信息。这怎么可能?这是因为/proc

文件系统和其他常规的文件系统一样把自己注册到虚拟文件系统层(VFS) 了。然而,直到当VFS 调用它,请求文件、目录的i-node

的时候,/proc 文件系统才根据内核中的信息建立相应的文件和目录。

加载proc 文件系统

如果系统中还没有加载proc 文件系统,可以通过如下命令加载proc 文件系统:

mount -t proc proc /proc

上述命令将成功加载你的proc 文件系统。

proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件:

* /proc/cpuinfo - CPU 的信息(型号, 家族, 缓存大小等)

* /proc/meminfo - 物理内存、交换空间等的信息

* /proc/mounts - 已加载的文件系统的列表

* /proc/devices - 可用设备的列表

* /proc/filesystems - 被支持的文件系统

* /proc/modules - 已加载的模块

* /proc/version - 内核版本

* /proc/cmdline - 系统启动时输入的内核命令行参数

proc 中的文件远不止上面列出的这么多。想要进一步了解的读者可以对/proc

的每一个文件都"more"一下或读参考文献[1]获取更多的有关/proc

目录中的文件的信息。我建议使用"more"而不是"cat",除非你知道这个文件很小,因为有些文件(比如kcore) 可能会非常长。

通过/proc 与内核交互

上面讨论的大部分/proc 的文件是只读的。而实际上/proc 文件系统通过/proc 中可读写的文件提供了对内核的交互机制。写这些文件可以改变内核的状态,因而要慎重改动这些文件。/proc/sys 目录存放所有可读写的文件的目录,可以被用于改变内核行为。

/proc/sys/kernel - 这个目录包含反通用内核行为的信息。/proc/sys/kernel/{domainname, hostname} 存放着机器/网络的域名和主机名。这些文件可以用于修改这些名字。

$ hostname

machinename.d********.com

$ cat /proc/sys/kernel/domainname

d********.com

$ cat /proc/sys/kernel/hostname

machinename

$ echo "new-machinename" > /proc/sys/kernel/hostname

$ hostname

new-machinename.d********.com

这样,通过修改/proc 文件系统中的文件,我们可以修改主机名。很多其他可配置的文件存在于/proc/sys/kernel/。这里不可能列出所有这些文件,读者可以自己去这个目录查看以得到更多细节信息。

另一个可配置的目录是/proc/sys/net。这个目录中的文件可以用于修改机器/网络的网络属性。比如,简单修改一个文件,你可以在网络上瘾藏匿的计算机。

$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

这将在网络上瘾藏你的机器,因为它不响应icmp_echo。主机将不会响应其他主机发出的ping 查询。

$ ping machinename.d********.com

no answer from machinename.d********.com

要改回缺省设置,只要

$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

/proc/sys 下还有许多其它可以用于改变内核属性。读者可以通过参考文献[1], [2] 获取更多信息。

结论

/proc 文件系统提供了一个基于文件的Linux 内部接口。它可以用于确定系统的各种不同设备和进程的状态。对他们进行配置。因而,理解和应用有关这个文件系统的知识是理解你的Linux 系统的关键。

相关推荐

请教:proc是什么意思

proc是定义子程序的伪指令,它和endp 分别表示子程序定义的开始和结束两者必须成对出现。如下:为子程序定义及说明,子程序名 PROC NEAR ( 或 FAR )……ret子程序名 ENDP子程序名为符合语法的标识符NEAR属性(段内近调用): 调用程序和子程序在同一代码段中,只能被相同代码段的其他程序调用;FAR属性(段间远调用): 调用程序和子程序不在同一代码段中,可以被相同或不同代码段的程序调用.
2023-07-23 18:09:281

Linux里面proc是什么?

proc被称为虚拟文件系统,它是一个控制中心,可以通过更改其中某些文件改变内核运行状态,它也是内核提空给我们的查询中心,用户可以通过它查看系统硬件及当前运行的进程信息。Linux中许多工具的数据来源正是proc目录中的内容,比如lsmod的命令是cat /proc/modules的别名。更多关于proc的介绍,或者是Linux的命令讲解,楼主可以百度《Linux就该这么学》,里面有详细的介绍和使用案例可以参考学习。
2023-07-23 18:09:382

PROC是什么的缩写

project
2023-07-23 18:09:452

proc是什么电压

工作电压。proc是工作电压,proc全称process,表示进程,该目录表示Linux运行时的进程。 proc是定义子程序的伪指令,proc和endp 分别表示子程序定义的开始和结束两者必须成对出现。
2023-07-23 18:09:531

proc是哪个国家的缩写

中华人民共和国PROC的首字母缩略词,其含义为中华人民共和国。请注意,中华人民共和国并不是PROC的唯一含义。PROC可能有多个定义。中华人民共和国。中华人民共和国(People"sRepublicofChina),简称“中国”,成立于1949年10月1日,位于亚洲东部,太平洋西岸,是工人阶级领导的、以工农联盟为基础的人民民主专政的社会主义国家。
2023-07-23 18:10:001

Linux下的proc目录详解

文章结构:proc是Linux系统下一个很重要的目录。 它跟/etc, /home等这些系统目录不同, 它不是一个真正的文件系统, 而是一个虚拟的文件系统。 它不存在于磁盘, 而是存在于系统内存中。 所以当你使用 ls -al /proc这条命令来查看proc目录时, 会看到其下面的所有文件的大小都为0字节。 proc以文件系统的方式为访问系统内核的操作提供接口。 很多系统的信息, 如内存使用情况, cpu使用情况, 进程信息等等这些信息,都可以通过查看/proc下的对应文件来获得。 proc文件系统是动态从系统内核读出所需信息的。 proc目录下具体有哪些文件呢? /proc 目录下的文件 /proc/cpuinifo CPU的信息(型号、家族、缓存大小等) /proc/meminfo物理内存、交换空间 /proc/mounts 已加载的文件系统的列表 /proc/devices 可用设备的列表 /proc/filesystems 被支持的文件系统 /proc/modules 已加载的模块 /proc/virsion 内核版本 /proc/cmdline 系统启动时输入的内核命令行参数 /proc/XXX XXX是指以进程PID(数字编号)命名的目录,每一个目录表示一个进程(即线程组)。 /proc/swaps 要获知swap空间的使用情况 /proc/uptime 获取系统的正常运行时间 /proc/fs/nfsd/exports 列出由NFS共享的文件系统 /proc/kmsg 该文件被作为内核日志信息源,它可以被作为一个系统信息调用的接口使用 /proc/self -- 到当前进程/proc目录的符号链接,通过这个目录可以获取当前运行进程的信息。 /proc/pci -- 挂接在PCI总线上的设备 /proc/tty/driver/serial --串口配置、统计信息 /proc/version -- 系统版本信息 /proc/sys/kernel/ostype /proc/sys/kernel/osrelease /proc/sys/kernel/version /proc/sys/kernel/hostname -- 主机名 /proc/sys/kernel/domainname -- 域名 /proc/partitions -- 硬盘设备分区信息 /proc/sys/dev/cdrom/info -- CDROM信息 /proc/locks -- 当前系统中所有的文件锁 /proc/loadavg -- 系统负荷信息 /proc/uptime -- 系统启动后的运行时间 很多系统命令在读取系统信息的时候,其实是从proc目录下读取对应的文件来获得的。 所以如果我们不使用这些命令, 直接到proc目录下去查看对应文件,也是可以获得对应的信息的。 下面举几个例子: 对于查看进程信息一栏,做下补充: /proc/N pid为N的进程信息 /proc/N/cmdline 进程启动命令 /proc/N/cwd 链接到进程当前工作目录 /proc/N/environ 进程环境变量列表 /proc/N/exe 链接到进程的执行命令文件 /proc/N/fd 包含进程相关的所有的文件描述符 /proc/N/maps 与进程相关的内存映射信息 /proc/N/mem 指代进程持有的内存,不可读 /proc/N/root 链接到进程的根目录 /proc/N/stat 进程的状态 /proc/N/statm 进程使用的内存的状态 /proc/N/status 进程状态信息,比stat/statm更具可读性 /proc/self 链接到当前正在运行的进程 更多的应用场景, 留给大家自己到/proc目录下探索吧。
2023-07-23 18:10:071

PROC在汇编中是什么意思

子程序定义
2023-07-23 18:10:176

手机存储里的proc文件夹是什么?能删吗

proc目录proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi目录不存在。除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。里面还有一些非数字命名文件,多不能删的,
2023-07-23 18:10:412

linux里proc文件系统 proc的全称是什么

proc 文件系统在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc 文件系统。最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的东西报告的内核使用,例如/proc/modules 有模块的列表/proc/meminfo 有内存使用的统计表。   使用proc 文件系统的方法和使用设备驱动程序非常相似--创建一个/proc 文件需要的所有信息的结构,包括任何处理函数的指针(在我们的例子中只有一个,当某人试图从/proc 文件读时调用的那一个)。然后,init_module 在内核中登记该结构而cleanup_module 注销它。   我们使用proc_register_dynamic(这是在2.0 版中的情况,在2.2 版中如果我们将节点设置为0系统将自动为我们做到) 的原因是我们不想预先决定我们的文件的节点数字,而是为防止冲突而由内核决定它。通常的文件系统存在于磁盘上而不是内存中(/proc 在内存中),在这中情况下,节点数是是指向文件的索引节点所在的磁盘位置的指针。节点包含文件的信息(例如文件的存取权限)和指向磁盘位置或文件数据可以被找到的几个位置的指针。   因为当文件被打开或关闭的时候不能得到调用,所以在这个模块中没有地方放置MOD_INC_USE_COUNT 和MOD_DEC_USE_COUNT,并且,如果文件被打开随后模块被移除,我们没有办法避免后果。在下一章我们会看到一个艰难的但更灵活的可以处理/proc文件的实现方式,它也可以让我们防止那个问题。Linux 内核提供了一种通过/proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。尽管在各种硬件平台上的Linux 系统的/proc 文件系统的基本概念都是相同的,但本文只讨论基于intel x86 架构的Linux /proc 文件系统。 _________________ _________________ _________________/proc --- 一个虚拟文件系统/proc 文件系统是一种内核和内核模块用来向进程(process) 发送信息的机制(所以叫做/proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中(on the fly) 改变设置(通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。如果你察看文件/proc/mounts (和mount 命令一样列出所有已经加载的文件系统),你会看到其中 一行是这样的:grep proc /proc/mounts/proc /proc proc rw 0 0/proc 由内核控制,没有承载/proc 的设备。因为/proc 主要存放由内核控制的状态信息,所以大部分这些信息的逻辑位置位于内核控制的内存。对/proc 进行一次"ls -l" 可以看到大部分文件都是0 字节大的;不过察看这些文件的时候,确实可以看到一些信息。这怎么可能?这是因为/proc 文件系统和其他常规的文件系统一样把自己注册到虚拟文件系统层(VFS) 了。然而,直到当VFS 调用它,请求文件、目录的i-node 的时候,/proc 文件系统才根据内核中的信息建立相应的文件和目录。加载proc 文件系统 如果系统中还没有加载proc 文件系统,可以通过如下命令加载proc 文件系统: mount -t proc proc /proc上述命令将成功加载你的proc 文件系统。proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件:* /proc/cpuinfo - CPU 的信息(型号, 家族, 缓存大小等)* /proc/meminfo - 物理内存、交换空间等的信息* /proc/mounts - 已加载的文件系统的列表* /proc/devices - 可用设备的列表* /proc/filesystems - 被支持的文件系统* /proc/modules - 已加载的模块* /proc/version - 内核版本* /proc/cmdline - 系统启动时输入的内核命令行参数proc 中的文件远不止上面列出的这么多。想要进一步了解的读者可以对/proc 的每一个文件都"more"一下或读参考文献[1]获取更多的有关/proc 目录中的文件的信息。我建议使用"more"而不是"cat",除非你知道这个文件很小,因为有些文件(比如kcore) 可能会非常长。通过/proc 与内核交互 上面讨论的大部分/proc 的文件是只读的。而实际上/proc 文件系统通过/proc 中可读写的文件提供了对内核的交互机制。写这些文件可以改变内核的状态,因而要慎重改动这些文件。/proc/sys 目录存放所有可读写的文件的目录,可以被用于改变内核行为。/proc/sys/kernel - 这个目录包含反通用内核行为的信息。/proc/sys/kernel/{domainname, hostname} 存放着机器/网络的域名和主机名。这些文件可以用于修改这些名字。 $ hostnamemachinename.domainname.com$ cat /proc/sys/kernel/domainnamedomainname.com$ cat /proc/sys/kernel/hostnamemachinename $ echo "new-machinename" > /proc/sys/kernel/hostname$ hostnamenew-machinename.domainname.com 这样,通过修改/proc 文件系统中的文件,我们可以修改主机名。很多其他可配置的文件存在于/proc/sys/kernel/。这里不可能列出所有这些文件,读者可以自己去这个目录查看以得到更多细节信息。另一个可配置的目录是/proc/sys/net。这个目录中的文件可以用于修改机器/网络的网络属性。比如,简单修改一个文件,你可以在网络上瘾藏匿的计算机。 $ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 这将在网络上瘾藏你的机器,因为它不响应icmp_echo。主机将不会响应其他主机发出的ping 查询。$ ping machinename.domainname.comno answer from machinename.domainname.com 要改回缺省设置,只要$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all /proc/sys 下还有许多其它可以用于改变内核属性。读者可以通过参考文献[1], [2] 获取更多信息。结论 /proc 文件系统提供了一个基于文件的Linux 内部接口。它可以用于确定系统的各种不同设备和进程的状态。对他们进行配置。因而,理解和应用有关这个文件系统的知识是理解你的Linux 系统的关键。
2023-07-23 18:10:525

C语言中的 “proc”什么意思

进程
2023-07-23 18:11:115

为什么说proc是一个虚拟文件系统?

proc下的内容并不是在ROM中存储中的,而只是在内存中存存在的。当你要进入其下的某个目录或打开其中某个文件时,系统才会即时地生成其相关信息/再看看别人怎么说的。
2023-07-23 18:11:532

请教proc文件系统问题

proc 文件系统在Linux中有额外的机制可以为内核和内核模块将信息发送给进程-- /proc 文件系统。最初设计的目的是允许更方便的对进程信息进行访问(因此得名),现在它被每一个有有趣的东西报告的内核使用,例如/proc/modules 有模块的列表/proc/meminfo 有内存使用的统计表。   使用proc 文件系统的方法和使用设备驱动程序非常相似--创建一个/proc 文件需要的所有信息的结构,包括任何处理函数的指针(在我们的例子中只有一个,当某人试图从/proc 文件读时调用的那一个)。然后,init_module 在内核中登记该结构而cleanup_module 注销它。   我们使用proc_register_dynamic(这是在2.0 版中的情况,在2.2 版中如果我们将节点设置为0系统将自动为我们做到) 的原因是我们不想预先决定我们的文件的节点数字,而是为防止冲突而由内核决定它。通常的文件系统存在于磁盘上而不是内存中(/proc 在内存中),在这中情况下,节点数是是指向文件的索引节点所在的磁盘位置的指针。节点包含文件的信息(例如文件的存取权限)和指向磁盘位置或文件数据可以被找到的几个位置的指针。   因为当文件被打开或关闭的时候不能得到调用,所以在这个模块中没有地方放置MOD_INC_USE_COUNT 和MOD_DEC_USE_COUNT,并且,如果文件被打开随后模块被移除,我们没有办法避免后果。在下一章我们会看到一个艰难的但更灵活的可以处理/proc文件的实现方式,它也可以让我们防止那个问题。Linux 内核提供了一种通过/proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。尽管在各种硬件平台上的Linux 系统的/proc 文件系统的基本概念都是相同的,但本文只讨论基于intel x86 架构的Linux /proc 文件系统。 _________________ _________________ _________________/proc --- 一个虚拟文件系统/proc 文件系统是一种内核和内核模块用来向进程(process) 发送信息的机制(所以叫做/proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中(on the fly) 改变设置(通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。如果你察看文件/proc/mounts (和mount 命令一样列出所有已经加载的文件系统),你会看到其中 一行是这样的:grep proc /proc/mounts/proc /proc proc rw 0 0/proc 由内核控制,没有承载/proc 的设备。因为/proc 主要存放由内核控制的状态信息,所以大部分这些信息的逻辑位置位于内核控制的内存。对/proc 进行一次"ls -l" 可以看到大部分文件都是0 字节大的;不过察看这些文件的时候,确实可以看到一些信息。这怎么可能?这是因为/proc 文件系统和其他常规的文件系统一样把自己注册到虚拟文件系统层(VFS) 了。然而,直到当VFS 调用它,请求文件、目录的i-node 的时候,/proc 文件系统才根据内核中的信息建立相应的文件和目录。加载proc 文件系统 如果系统中还没有加载proc 文件系统,可以通过如下命令加载proc 文件系统: mount -t proc proc /proc上述命令将成功加载你的proc 文件系统。proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件:* /proc/cpuinfo - CPU 的信息(型号, 家族, 缓存大小等)* /proc/meminfo - 物理内存、交换空间等的信息* /proc/mounts - 已加载的文件系统的列表* /proc/devices - 可用设备的列表* /proc/filesystems - 被支持的文件系统* /proc/modules - 已加载的模块* /proc/version - 内核版本* /proc/cmdline - 系统启动时输入的内核命令行参数proc 中的文件远不止上面列出的这么多。想要进一步了解的读者可以对/proc 的每一个文件都"more"一下或读参考文献[1]获取更多的有关/proc 目录中的文件的信息。我建议使用"more"而不是"cat",除非你知道这个文件很小,因为有些文件(比如kcore) 可能会非常长。通过/proc 与内核交互 上面讨论的大部分/proc 的文件是只读的。而实际上/proc 文件系统通过/proc 中可读写的文件提供了对内核的交互机制。写这些文件可以改变内核的状态,因而要慎重改动这些文件。/proc/sys 目录存放所有可读写的文件的目录,可以被用于改变内核行为。/proc/sys/kernel - 这个目录包含反通用内核行为的信息。/proc/sys/kernel/{domainname, hostname} 存放着机器/网络的域名和主机名。这些文件可以用于修改这些名字。 $ hostnamemachinename.domainname.com$ cat /proc/sys/kernel/domainnamedomainname.com$ cat /proc/sys/kernel/hostnamemachinename $ echo "new-machinename" > /proc/sys/kernel/hostname$ hostnamenew-machinename.domainname.com 这样,通过修改/proc 文件系统中的文件,我们可以修改主机名。很多其他可配置的文件存在于/proc/sys/kernel/。这里不可能列出所有这些文件,读者可以自己去这个目录查看以得到更多细节信息。另一个可配置的目录是/proc/sys/net。这个目录中的文件可以用于修改机器/网络的网络属性。比如,简单修改一个文件,你可以在网络上瘾藏匿的计算机。 $ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 这将在网络上瘾藏你的机器,因为它不响应icmp_echo。主机将不会响应其他主机发出的ping 查询。$ ping machinename.domainname.comno answer from machinename.domainname.com 要改回缺省设置,只要$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all /proc/sys 下还有许多其它可以用于改变内核属性。读者可以通过参考文献[1], [2] 获取更多信息。结论 /proc 文件系统提供了一个基于文件的Linux 内部接口。它可以用于确定系统的各种不同设备和进程的状态。对他们进行配置。因而,理解和应用有关这个文件系统的知识是理解你的Linux 系统的关键。
2023-07-23 18:12:001

vb 中的Proc是什么意思啊

1、输出 3 6Static 静态变量声明语句 使用 Static 语句声明的变量会一直保持其值,直至该模块复位或重新启动。call f1为什么要出现2次?因为它要考你 Static 的用法。2、输出 15proc代表什么意思?proc一个函数名而已,不代表什么意思。只要你高兴你可以把它换成你的名字。(要所有的proc都换)上面2道题的程序含义是什么?第一题纯粹的考题。没有什么含义。就靠你 Static 语句第二题求两个数中的最大数。
2023-07-23 18:12:102

如果R没有自带pROC程序包,现在要实现pROC程序包中roc函数的调用,如何用代码实?

如果 R 编程语言未安装 pROC 包,则可以通过运行以下代码来安装它:安装 pROC 软件包后,可以通过首先使用以下代码加载 pROC 软件包来使用 roc 函数:然后,您可以调用 roc 函数并向其传递必要的参数,以计算数据的接收器工作特征 (ROC) 曲线。例如,如果调用了真标签向量,并调用了预测概率向量,则可以使用以下代码计算 ROC 曲线:true_labelspred_probs这将创建一个名为包含 ROC 曲线数据的对象。然后,您可以使用该函数绘制 ROC 曲线,如下所示:roc_curveplot或者,您可以使用 pROC 包中的函数为 ROC 曲线创建 ggplot 对象,如果需要,可以进一步自定义该对象。下面是如何使用该函数的示例:ggrocggroc这将创建一个名为 ggplot 的对象,然后您可以使用该函数显示该对象,如下所示:roc_plotprint我希望这有帮助!如果您有任何其他问题,请告诉我。回答不易望请采纳
2023-07-23 18:12:171

服务器proc是什么意思

一般是Linux服务器中出现。/proc 是个虚拟文件系统、也就是、重新引导后修改会被重新初始化提供了进程信息、内存资源、硬件设备、内核内存等信息比如:网卡:/proc/sys/vm/ipv4/ip_forward:控制ip转发内存:/proc/sys/vm/drop_caches:输入1强制内核从缓存释放一些内存
2023-07-23 18:13:041

proc是sql语句中什么意思

您好:SQL中创建存储过程的关键字为CREATE PROCEDURE 可以简写为CREATE PROC您说的PROC应该就是这个意思了。
2023-07-23 18:13:201

vb中的proc是一个什么样的函数

proc应该是函数名吧,用你自己定义的函数比如fun1,abc等代替proc就是你自己定义的函数,别的语言都是这样的,不知道vb是不是。
2023-07-23 18:13:301

Linux系统中的/proc文件系统有什么用?

/proc文件系统是一个基于内存的文件系统,其维护着关于当前正在运行的内核状态信息,其中包括CPU、内存、分区划分、I/O地址、直接内存访问通道和正在运行的进程。这个文件系统所代表的并不是各种实际存储信息的文件,它们指向的是内存里的信息。/proc文件系统是由系统自动维护的。还有不会的请参考《linux就该这么学》,针对各种linux疑难杂症,帮助linux学习者。
2023-07-23 18:13:402

引用文献中常出现的“Proc”是什么的简称?如下所示

应该是proceeding的意思吧,就是会议
2023-07-23 18:13:472

linux下cat /proc/loadavg 命令用来查看什么?

1.cat命令:查看文件内的特殊字符
2023-07-23 18:14:013

请教用proc编译C++文件的问题

可以把问题描述清楚一点,这样才能更快获得帮助。使用proc来转换源文件的命令通常是:proc parse=full USERID=user/pwd@dns SQLCHECK=SEMANTICS yourfile.pc include="/oracle/app/oracle/product/9.2.0/precomp/public"其中,parse=full一般是固定的,USERID后面跟上连接到oracle数据库的连接字符串,格式为:用户/密码@服务器名SQLCHECK=SEMANTICS 指明SQLCHECK参数,一般也是固定的include="/oracle/app/oracle/product/9.2.0/precomp/public"指明预编译时候需要的头文件路径其中/oracle/app/oracle/product/9.2.0是你的oracle数字路径,后面的precomp/public是固定的yourfile.pc 你想要转换的使用嵌入式SQL编写好的源文件。执行之后,如果没错,就会生成.c源文件,编译就可以了。如果执行出错,会生成*.lis文件,指出出错的地方,按照错误说明修改之后再试。需要注意相关环境变量要配置正确,.pc源文件里所用到的表,字段,存储过程等在数据库中要存在,并且,连接上去的用户要有相关表的访问权限。
2023-07-23 18:16:001

SQL里创建proc

好难啊
2023-07-23 18:16:084

汇编语言main proc far是什么意思

你说的大概是这么一种程序框架:mainprocfarpushdsxorax,axpushax......retmainendpendmain这是一种最原始的dos下exe程序的框架。那时候,dos的版本很低,dos还没有提供4ch号dos功能调用,结束程序只能用int20h完成。而int20h结束程序要求执行时cs指向程序段前缀(psp)所在的段地址。所以,程序需要将主程序定义成远调用过程(procfar),这样就会将ret指令汇编成远调用返回(retf)。而代码开始的三条指令是将psp段地址入栈,再将0入栈。这样,执行ret的时候就会执行到psp段偏移地址为0处的一条int20h指令,保证正确返回dos。后来稍高一点版本的dos有了4ch号功能调用,就不需要这种程序框架了。教科书上很多程序是抄来的,所以人们还常常会看到这种早就过时被淘汰了的代码。
2023-07-23 18:16:161

零夏proc和3.0pro有什么区别

同一版本数字越大越稳定M是稳定版~!一般每个大版本从M010以后越靠后越稳定~!同样是人年龄越大越沉稳这样一梯度
2023-07-23 18:16:264

红警rules里面PROC是什么意思

Prerequisite=XXX填建筑名。这个代码指定该单位制造时所必须的建筑,当已方没有该建筑时该单位不能建造。PROC 矿厂类建筑,这种类型的新建筑应该同时在PrerequisiteProc=中注册.
2023-07-23 18:16:451

vb中的proc是一个什么样的函数

proc应该是函数名吧,用你自己定义的函数比如fun1,abc等代替proc就是你自己定义的函数,别的语言都是这样的,不知道vb是不是。
2023-07-23 18:16:541

中国是PROC吗?

中国是PRC (People"s Republic of China)
2023-07-23 18:17:043

linux环境如何执行proc文件

不在PATH环境变量路径里的可执行文件要运行,得加路径,相对路径、绝对路径都可以,比如./proc
2023-07-23 18:17:121

UNIX为什么要把PCB分为进程表项proc区和U区

为了节省内存,UNIX系统把进程控制块分成两部分。一部分为进程的基本控制块,简称proc 结构,它存放着进程最常用的一些信息,所以proc 结构一般常驻内存。另一部分称为进程扩充控制块,简称user 结构,它存放着进程的一些必要但不常使用的信息。
2023-07-23 18:17:222

abb配置参数错误proc

题主是否想询问“abb配置参数错误proc的原因有哪些”abb配置参数错误proc的原因有程序控制器的参数配置错误、程序控制器的电源故障、程序控制器的软件错误、程序控制器的硬件故障。1、程序控制器的参数配置错误:程序控制器的参数配置不正确会导致控制系统无法运行。在这种情况下,可以检查配置参数是否正确设置,并进行相应的调整和修改。2、程序控制器的电源故障:如果程序控制器的电源故障,会导致控制系统无法正常运行。在这种情况下,需要检查电源是否正常,如果电源有问题,需要进行修理或更换。3、程序控制器的软件错误:如果程序控制器的软件出现错误,会导致控制系统无法正常运行。在这种情况下,需要重新安装或更新程序控制器的软件,以修复出现的错误。4、程序控制器的硬件故障:如果程序控制器的硬件出现故障,会导致控制系统无法正常运行。在这种情况下,需要进行硬件维修或更换,以确保程序控制器能够正常运行。
2023-07-23 18:17:371

Linux 关于 /sys 和 /proc

sys 和 proc 是内核启动后生成的虚拟文件系统,将他们挂载到根文件系统后便可以查看其中的内容, 挂载方法是 ref 例如 hello 模块驱动, 创建一个字符设备 hello 执行 insmod 后在 sys 中查找相关信息 设备实际的位置是在 /sys/devices/virtual/hello_class/hello, 但在 class 也有内容, class 只是一种分类方式, module 中有是因为 /sys/module 目录包含所有被载入Kernel的模块,无论这些模块是以内联(inlined)方式编译到内核映像文件中还是编译为外模块(.ko文件)
2023-07-23 18:17:441

求LINUX系统中,对proc文件系统的理解。

/proc文件系统是GNU/Linux特有的。它是一个虚拟的文件系统,因此在该目录中的所有文件都不会消耗磁盘空间。通过它能够非常简便地了解系统信息,尤其是其中的大部分文件是人类可阅读的(不过还是需要一些帮助)。许多程序实际上只是从/proc的文件中收集信息,然后按照它们自己的格式组织后显示出来。有一些显示进程信息的程序(top、ps等)就是这么作的。/proc还是了解您系统硬件的好去处。就象那些显示进程信息的程序一样,不少程序只是提供了获取/proc中信息的接口。其中还有一个特殊的子目录:/proc/sys。它让您能够显示内核参数并更改它们,而且这一更改将立即生效。
2023-07-23 18:18:052

代码中Proc是什么意思

proc是定义子程序的伪指令,它和endp分别表示子程序定义的开始和结束两者必须成对出现。如下:为子程序定义及说明,子程序名PROCNEAR(或FAR)……ret子程序名ENDP子程序名为符合语法的标识符NEAR属性(段内近调用):调用程序和子程序在同一代码段中,只能被相同代码段的其他程序调用;FAR属性(段间远调用):调用程序和子程序不在同一代码段中,可以被相同或不同代码段的程序调用.
2023-07-23 18:18:141

手机存储里的proc文件夹是什么?能删吗

proc目录 proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。里面还有一些非数字命名文件,多不能删的,
2023-07-23 18:18:212

VF 中 PROC是什么意思呀?

PROC是PROCEDURE的简写,是过程,triad 是过程名
2023-07-23 18:18:312

PROC是中国的缩写吗

PROC 的首字母缩略词,其含义为 中华人民共和国。请注意,中华人民共和国 并不是 PROC 的唯一含义。PROC 可能有多个定义,
2023-07-23 18:18:491

怎样在/proc目录下创建一个文件

貌似没有这种功能。因为文件的默认权限是由文件的创建程序决定的。创建程序赋予该文件什么权限就是什么权限。你可以自己写个脚本创建文件。比如把下面的代码写到脚本文件里然后命名为newfile#!/bin/shforfin$*dotouch$fchmod-Rugo+x$fdone
2023-07-23 18:18:593

PROC在汇编中是什么意思

PROC在汇编中是过程定义伪指令的意思
2023-07-23 18:19:071

怎样在Linux驱动中创建proc节点

一、定义proc节点的读、写函数static int tp_switch_writeproc(struct file *file,const char *buffer, unsigned long count,void *data){ sscanf(buffer,"%d", &tp_dbg); printk("tpd: proc-->tp_dbg = %d ", tp_dbg); return count;} static int tp_switch_readproc(char *page, char **start, off_t off, int count,int *eof, void *data){ int len; unsigned char tmp =tp_dbg&0x0F; len = sprintf(page,"%c ", tmp); return 2;} 二、驱动加载时创建proc节点的入口#include <Linux/proc_fs.h>static struct proc_dir_entry *tp_root; static struct proc_dir_entry *debug_entry; #define USER_ROOT_DIR "tp_debug" #define USER_ENTRY1 "debug_switch"staticint goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id *id){ … … init_debug_port(); //创建proc调试节点 … …}static int init_debug_port(void){ pt_root =proc_mkdir(USER_ROOT_DIR, NULL); if (NULL==pt_root) { printk(KERN_ALERT"Create dir /proc/%s error! ", USER_ROOT_DIR); return -1; } printk(KERN_INFO"Create dir /proc/%s ", USER_ROOT_DIR); // Create a test entryunder USER_ROOT_DIR pt_entry1 =create_proc_entry(USER_ENTRY1, 0666, pt_root); if (NULL ==pt_entry1) { printk(KERN_ALERT"Create entry %s under /proc/%s error! ", USER_ENTRY1,USER_ROOT_DIR); goto err_out; } pt_entry1->write_proc= tp_switch_writeproc; pt_entry1->read_proc =tp_switch_readproc; printk(KERN_INFO"Create /proc/%s/%s ", USER_ROOT_DIR,USER_ENTRY1); return 0; err_out: pt_entry1->read_proc =NULL; pt_entry1->write_proc= NULL; remove_proc_entry(USER_ROOT_DIR,pt_root); return -1; } 三、卸载驱动时删除proc节点static void remove_debug_port(void){ remove_proc_entry(USER_ENTRY1,pt_root); remove_proc_entry(USER_ROOT_DIR,NULL);} static int goodix_ts_remove(struct i2c_client *client){ … … remove_debug_port(); … …}
2023-07-23 18:19:151

在SAS中proc expand是做什么用的求详细解释

1.proc expand主要用来处理时间序列问题,比如,将日线数据转换为月度单位数据(季度、年);求数据的平滑值(移动平均、求和、方差等等)。2.data=have,have是你需要操作的数据集,out=want,want是expand操作得到的结果数据集3.第一个id是数据中的一个变量,对其进行降序排序;第二个id是proc expand语句的一个函数,id函数表示对数据have中一个数值型变量进行识别,通常id后面的变量是时间变量(year,month,day...).id 函数要与by函数一起用,且它后面的变量不能有重复值。
2023-07-23 18:19:231

linux 怎么访问proc目录

/proc目录下都是一些纯文本文件,记录的是从驱动程序和内核获取到的信息,是非常有用的系统状态信息,因为是文本文件只需要用cat命令来访问就可以了,比如:cat /proc/cpuinfocat /proc/meminfo可以分别查看到CPU和内存的信息
2023-07-23 18:19:421

关于VB里proc调用和ByVal、ByRef的用法。

BYREF说明白点就是在过程中使用的数值和外面的数值相等了,并且一旦在过程中改变了这个数值,那么引用过程的数值也修改了。一般来说缺省就是BYREF。优点:节约一个内存地址的大小,并且实现数值的修改BYVAL指的是为这个变量在内存中重新开辟一个地址进行存储。在过程中修改这个数值不会影响这个数值。(1)ByRef例如SUB byr(byref a as integer)"BYREF不写也是对的a=10end SUB然后如果我们这样用Dim x as integerbyr xmsgbox x输出10(2)ByVal例如SUB byv(byval a as integer)a=10end SUB然后再Dim x as integerbyv xmsgbox x
2023-07-23 18:19:503

Android上层怎么读写proc节点

import android.app.Activity;import android.os.Bundle;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.ToggleButton;import android.os.SystemProperties;import android.util.Log;import android.widget.Toast; //wangimport java.util.Timer;import java.util.TimerTask;import android.os.PowerManager;import java.io.*; import android.os.Looper;public class DebugOptionActivity extends Activity{private static final String TAG = "tpDebug"; private int checkValue = 0;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.debug);ToggleButton toggle = (ToggleButton)findViewById(R.id.toggle);try{File readFile = new File("proc/tp_debug/debug_switch"); FileReader inCmd = new FileReader(readFile); try{ checkValue = inCmd.read(); if(checkValue != 0){toggle.setChecked(true);}else{toggle.setChecked(false);}}catch (IOException e){e.printStackTrace();} } catch (FileNotFoundException e){ e.printStackTrace(); } //ToggleButton toggle = (ToggleButton)findViewById(R.id.toggle);toggle.setOnCheckedChangeListener(new OnCheckedChangeListener(){public void onCheckedChanged(CompoundButton arg0, boolean arg1){if (arg1){//openFile awakeTimeFile = new File("proc/tp_debug/debug_switch"); FileWriter fr; try { fr = new FileWriter(awakeTimeFile); fr.write("1"); fr.close(); } catch (IOException e) { e.printStackTrace(); }}else{//closeFile awakeTimeFile = new File("proc/tp_debug/debug_switch"); FileWriter fr; try { fr = new FileWriter(awakeTimeFile); fr.write("0"); fr.close(); } catch (IOException e) {e.printStackTrace(); }}}});}}
2023-07-23 18:19:582

安卓系统的名称为proc的文件夹有什么用?

您好,下载游戏后您可以放到手机的任意文件夹下,然后在手机的文件管理功能中找到该文件,直接运行安装即可您也可以在您的电脑上安装pc套件,然后连上您的手机,选择软件页面,搜索您想要使用的软件,然后点击安装即可。望采纳。
2023-07-23 18:20:052

mysql.proc在那个文件夹下

ysql数据库在系统上是以一个文件夹的形式出现的,你创建了ac数据库,那么在磁盘上就会出现ac的目录,而ac数据库的全局配置则是ac文件夹中的db.opt文件来管理。mysql的数据文件在datadir下,你在数据库中执行 show variables like "%datadir%";就会显示数据库文件的路径,你可以找到ac文件夹。
2023-07-23 18:20:121

如何修改 /proc/ 目录权限

登录FTP——相应目录——按右键——属性!在属性中可以看到文件夹的权限设置。在Read前面打勾,表示可读,在Write前面打勾,表示可写,在Execcute前面打勾。表示可执行。 可以在前面打勾来更改权限。也可以点击chmod,直接输入数字777更改权限。注意:只有Linux系列虚拟主机需要设置权限。Windows平台的虚拟主机,网站内的所有文件对您的用户来讲是可以完全控制的,不用设置权限。
2023-07-23 18:20:201

雨中冒险2Proc系数及机制详解触发流内核剖析

雨中冒险2触发流是游戏中的一个经典流派,游戏中各种类型的装备如何触发?下面一起来看看雨中冒险2Proc系数及机制详解雨中冒险2Proc系数及机制详解首先,雨中冒险2(下称ROR2)的伤害机制是这样的。玩家使用技能 Skill,通过 投射物/球体/其他方式 造成了各种类型的伤害,代码里赋予一个 DamageInfo 的 类 用于记录本次技能造成的伤害。DamageInfo 经过 GlobalEventMangaer 类的 OnHitEnemy 事件,判断技能击中敌人后产生的各种效果,判断各种物品的触发。判断完毕后,开始计算伤害-------进入 HealthComponent 类 的 TakeDamage 事件,从而计算最终伤害。而我们今天这篇文章的重点,将注重于 OnHitEnemy 这个事件里,使用 Proc Coefficient 触发系数 进行计算触发型道具的原理。任何角色造成的伤害都属于 DamageInfo 类。而这个类里有一个 float 属性 是 procCoefficient。这个属性影响了我们的各类击中后触发的效果以及伤害。我们拿我们最熟悉的光头 Commando 来举例Double Tap 双击 技能 拥有1 proc系数,同时造成100%的伤害。那么在你拥有5个粘性炸弹,1个 MK1 导弹的时候。一次技能 有 (5x5)x 1 =25% 的概率触发 粘性炸弹,造成100% x 180%=180%的合计伤害。一次技能 有 (10%)x 1 =10% 的概率触发 一个导弹,造成100% x 300%=300%的合计伤害。以光头作为模板,我们来看看其他拥有不同的伤害和proc系数的技能是怎么样的。Auto-Nailgun 自动钉枪 技能 拥有 0.6 proc系数,同时造成70%的伤害。那么在你拥有5个粘性炸弹,1个 MK1 导弹的时候。一发钉子 有 (5x5)x 0.6 =15% 的概率触发 粘性炸弹,造成70% x 180%=126% 的合计伤害。一发钉子 有 (10%)x 0.6 =6% 的概率触发 一个导弹,造成70% x 300%=210% 的合计伤害。发现了吗?对于输出频率高的小车,作者 hopoo 选择了引入 proc系数 这一机制来平衡 高攻击频率和其他技能的触发平衡。In Hopoo Games Development Thoughts #1, the developers introduced the concept of proc coefficient like so:"MUL-T"s nailgun has a low proc coefficient per nail of 0.4 compared to most character"s 1.0, so he isn"t proccing stuff a ton faster than other characters." - Quote from NaKyle, 03/30-2019.在 Hopoo Games 的游戏设计思想讨论#1 里,开发者对Proc系数的描述是这样的:"MUL-T的钉枪,每根钉子的proc系数很低,只有0.4,而大多数角色都是1.0,所以他触发道具的速度并不比其他角色快上一大堆。" - 引自NaKyle,2019年03月30日。(备注,之后小车的proc系数从0.4改成了0.6,重振颓势,复兴小车荣耀 我辈义不容辞)作者引入Proc 系数这一概念,有效地将攻击频率快,但是伤害低的技能 和 攻击频率慢,但是伤害高的技能 ,在触发道具的数值上作出了合理的平衡。那么。如果一次伤害, DamegeInfo 的proc系数是0的情况呢?如果一次伤害的proc系数为0,那么接下来所有触发内容都不会被响应。相信细心的读者可能已经联想到了,有时候你的导弹/火球 会触发尤克里里,冰环火环等装备。要知道,触发的特效造成的伤害,也是会进入OnHitEnemy这一事件响应中的。而触发道具的伤害都含有自己的proc系数。那么为什么我们不会看见导弹 触发 尤克里里,尤克里里再触发导弹的死循环?这里就要引入一个新的概念,叫做 procChainMask 我称之为 Proc连锁机制。在OnhitEnemy事件中,计算完各类保证伤害正常的代码,保证Proc系数不为0的情况之下,我们造成的伤害会经过第一层判断。if (damageInfo.crit){GlobalEventManager.instance.OnCrit(component, master, damageInfo.procCoefficient, damageInfo.procChainMask);}如果角色的crit暴击率大于100,那么这次伤害会直接判断并标记为为暴击,接下来在TakeDamage事件里使得最终伤害翻倍。Proc系数不影响暴击,暴击独立于Proc系统。if (!damageInfo.procChainMask.HasProc(ProcType.Missile)){this.ProcMissile(inventory.GetItemCount(RoR2Content.Items.Missile), component, master, teamIndex, damageInfo.procChainMask, victim, damageInfo);}而接下来,就是判断是否触发各类道具的时刻了。我们可以看到,如果这次伤害,也就是 damageinfo 的 procChainMask 属性 不具有 导弹的 ProcType 触发种类,那么就会进入触发导弹的判断。if (Util.CheckRoll(10f * damageInfo.procCoefficient, attackerMaster)){float damageCoefficient = 3f * (float)stack;float damage = Util.OnHitProcDamage(damageInfo.damage, attackerBody.damage, damageCoefficient);ProcChainMask procChainMask2 = procChainMask;procChainMask2.AddProc(ProcType.Missile);FireProjectileInfo fireProjectileInfo = new FireProjectileInfo{projectilePrefab = this.missilePrefab,position = position,rotation = Util.QuaternionSafeLookRotation(up),procChainMask = procChainMask2,target = victim,owner = gameObject,damage = damage,crit = damageInfo.crit,force = 200f,damageColorIndex = DamageColorIndex.Item};ProjectileManager.instance.FireProjectile(fireProjectileInfo);}首先会通过随机数判断是否触发导弹,而这个随机数的概率判断会经过proc系数的一次修正。所以小车触发导弹的几率会是10f x 0.6 = 6%。然后计算堆叠数,判断出这次Projectile 投射物的 基础伤害。如果成功触发导弹,则会发射出一个导弹(废话)而这个导弹被一个语句赋予了一个属性。procChainMask2.AddProc(ProcType.Missile);这个导弹之后造成的伤害,也就是属于这个导弹的damageinfo ,会被打上一个导弹的ProcType。就像是你对一个人施放了魔咒,刻下了一个印记,那么这个印记就不会再被别人重复刻上。然后回头看看之前的触发语句。if (!damageInfo.procChainMask.HasProc(ProcType.Missile))如果这次伤害 Damageinfo 里不具有 ProcType.Missile 导弹属性。那么才会进入判断导弹的触发。也就是说,这解决了一个问题,导弹是不会重复触发导弹的。那么导弹触发的尤克里里,会不会再触发导弹?答案是不会。为什么?因为ProcChainMask 是继承的,犹如链条一般。发射出去的导弹具有 ProcType.Missile 的属性,而如果这个导弹触发了别的道具,那么别的道具造成的伤害 Damageinfo 里,也会有这个属性。也就是说,导弹触发的尤克里里,造成的闪电弹射伤害,已经被导弹玷污了(雾),再也没法触发导弹了。同理,导弹触发的熔岩钻机,迸射出的火球也不能再触发导弹。这就是 Proc 连锁机制,保证游戏伤害平衡而不卡死的关键。了解了以上内容,我们就可以对症下药,更合理地构建自己的build了。附录1Q:为什么我拿了很多撬棍和水晶,还是没法触发火环?if (damageInfo.damage / component.damage= 4fcomponent.HasBuff(RoR2Content.Buffs.ElementalRingsReady))首先必须你造成的伤害 DamageInfo,具有不为 0 的 proc系数。其次必须你造成的总计伤害数值,是你 面板伤害 的 400%。而撬棍和水晶的伤害加成,并不是计算在DamageInfo 里面的,而是通过TakeDamage事件里的最终伤害加成实现的。也就是提高终伤并不能触碰到冰火环的阈值。int itemCount2 = master.inventory.GetItemCount(RoR2Content.Items.NearbyDamageBonus);if (itemCount20vector.sqrMagnitude = 169f){damageInfo.damageColorIndex = DamageColorIndex.Nearby;num *= 1f + (float)itemCount2 * 0.2f;......上为凝神水晶的代码,可以看到只是提高终伤数值 num. 而不是修改damageinfo的damage属性.if (damageInfo.crit){num *= 2f;}同时这里有一个很简单粗暴的暴击双倍伤害代码,也是放在TakeDamage事件里的。所以如果想触发冰火环,你需要让技能的伤害x道具的伤害 超过400%。比如如果你是光头,想用平A M1 触发 火环,那你需要2个导弹,发射一发导弹造成600%的伤害,才能触发。如果你是铁拳Loader,平A只有340%,那么你如果触发1个导弹,就是1020%的伤害,绝对能触发火环。附录2常见物品的Proc系数和影响范围 (T1 T2 T3 TB TE为 白绿红黄装 )影响范围T1 三尖匕首:影响 触发几率 和 持续时间T1 眩晕手雷:触发几率T1 黏弹:触发几率T2 AtG导弹MK.1:触发几率T2 尤克里里:触发几率T2 吸血种子:回复量T2 捕食本能:攻速Buff 持续时间T2 收割者镰刀:回复量T3 完美巨兽:爆炸半径T3 感应肉钩:触发几率*T3 秃鹫苏醒火焰精英(伊芙利特的卓越):燃烧 持续时间冰霜精英(她的噬咬拥抱):减速 持续时间天青石精英(幽灵头饰):减速 持续时间孔雀石精英(恩库哈呐的反驳):禁疗Buff 持续时间T3 粉碎的正义:减甲 持续时间TB 熔融钻机:触发几率TB 电能钻机:触发几率Proc系数非列出的幸存者技能均为1。Acrid 绝命毒师 shift 腐蚀跳跃 酸池持续伤害 0.1Artificer 工匠 M2 充能完毕的纳米炸弹 能量卷须 0.3Bandit 盗贼 M1 迸射 每个弹丸0.5. (5个弹丸)Captain 船长 M1 火神霰弹枪 每个弹丸0.75(8个弹丸)Captain 船长 R 轨道补给信标 0 (?)Commando M2 突击队员(指挥官) 相位爆破 0.5 (8个弹丸)Engineer 工程师 R TR58碳化器炮塔 平A 0.6 (移动炮台)Huntress 女猎手 M1 疾风 0.7 (3下)Loader 装弹手 R M551电塔 0.5MUL-T 多面手 M1 自动钉枪 0.6(12个钉子)MUL-T 多面手 M2 爆破筒 0.3(子母弹)Rex 雷克斯 M1 命令:注射 0.5 (3下)Rex 雷克斯 M2 命令:钻孔 0.5Rex 雷克斯 shift 树莓齐射 0.5Rex 雷克斯 R 触须生长 0(持续伤害)物品,非列出的均为1。T1 一捆烟花 0.2T1 黏弹 0T1 汽油 0 (和鬼火不同机制!)T2 鲁纳德的手环 0T2 贾罗的手环 0T2 剃刀尖网 0.5T2 尤克里里 0.2T2 鬼火 1 (wiki写的1,目前没研究出来能不能触发,代码里看不太明白)T3 完美巨兽 0T3 仪式匕首 1T3 冰霜圣物 0.2T3 恩库哈呐的意见 0.2T3 共鸣圆盘 穿刺 1 爆炸 0T3 感应肉钩 0.33T3 不稳定的特斯拉线圈 0.3TE 前子蓄能器 触须 0.1TL 异端幻象 爆炸伤害1,触碰伤害0.1
2023-07-23 18:20:271

sysctl、ulimit以及/proc文件系统

参考: sysctl 命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录 /proc/sys 中。它包含一些 Tcp/Ip堆栈和虚拟内存系统的高级选项,可以通过修改某些值来提高系统性能。 sysctl 可以读取和设置超过五百个系统变量。 sysctl 变量的设置通常是 字符串、数字或布尔型(布尔型用 1 表示 yes,0 表示 no)。 语法: 可以通过 sysctl 修改系统变量,也可以通过编辑 sysctl.conf 配置文件来修改系统变量。 举个栗子 ,请根据实际情况调整: 重新加载内核参数: sysctl -p 大多Unix-Like系统,都提供了限制每个进程和每个基本用户使用线程,文件和网络连接等系统资源的一些方法。 ulimit 是指每个user使用各种资源的限制值。 ulimit 命令用来限制系统用户对shell资源的访问,它是一种简单并且有效的实现资源限制的方式。 假设有这样一种情况,当一台Linux主机上同时登陆了10人,在资源无限制的情况下,这10个用户同时打开了500个文件。假设每个文件的大小有10M,这是系统的内存资源就会收到巨大挑战。 但是任何一台主机的资源都不可能是无限的。所以,资源的合理配置和分配,不仅仅是保证系统可用性的必要条件,也与系统上软件运行的性能有着密不可分的联系。 ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制: sort和hard限制: 可以在一下位置进行ulimit的设置: limits.conf 是 pam_limits.so 的配置文件,Linux PAM(Pluggable Authentication Modules,插入式认证模块)。突破系统默认限制,对系统资源有一定保护作用。 pam_limits模块对用户的会话进行资源限制,然后 /etc/pam.d/ 下的应用程序调用 pam_***.so 模块。 limits.conf 是针对用户,而 sysctl.conf 是针对整个系统参数配置。 一个shell的初始 limits 就是由 pam_limits 设定的,用户登录后,pam_limits会给用户的shell设定在limits.conf定义的值. pam_limits的设定值也是 per-process的;pam_limits的设置是 永久生效的. 配置limits.conf: 举个栗子: domain: type: item: value: Linux内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构,改变内核设置的机制。 proc 文件系统是一个伪文件系统,它只存在内存当中,不占用外部空间。它以文件系统的方式为访问系统内核数据的操作提供接口。 对 /proc 中内核文件的修改,针对的是 整个系统 的 内核参数 ,修改后 立即生效 ,但修改是 临时的 ,重启后失效。 修改 /proc 文件系统中的参数是临时的,但修改 sysctl.conf 的参数确实永久有效的。 配置文件 sysctl.conf 变量在 /proc/sys 下,其对应关系如下: proc中的每个文件都有一组分配给它的非常特殊的文件许可权,并且每个文件属于特定的用户标识。 以下是/proc目录中进程N的信息:
2023-07-23 18:20:341

linux系统/proc目录下数字目录中的数字是什么含义

/bin:存储常用用户指令。/boot:存储核心、模块映像等启动用文件/dev:存储设备文件/etc:存储系统、服务的配置目录与文件/home:存放个人主目录/lib:存放库文件,诸如核心模块、驱动/lost+found:存储fsck用的孤儿文件/mnt:系统加载文件系统时用的常用挂载点/opt:第三方工具使用的安装目录/proc:虚拟文件系统,包含系统核心信息/root:root用户的主目录/sbin:存储系统管理用指令/tmp:临时文件的暂存点/usr:存放与用户直接相关的文件与目录/var:存储在系统运行中可能会更改的数据
2023-07-23 18:20:421

编程:(c语言) ,请编写一个函数proc,它的功能是:求出1----m之间(含m)能被7或11整除的所有整数

又是要考试了吧?
2023-07-23 18:20:523